В Python можно сравнить каждый элемент массива со "следующим" элементом (включая последний элемент с первым элементом) со следующим кодом:
a = [0, 1, 2, 3]
for i in range(-1, 3):
if a[i] + 1 >= a[i+1]:
print a[i], 'works'
Выход:
3 works
0 works
1 works
2 works
Если я хочу сравнить первый элемент массива со вторым, вторым с третьим и т.д., И, наконец, последним с первым, я могу сделать это с помощью всего лишь цикла в Python.
Могу ли я сделать это в C++? Могу ли я зацикливать элементы таким образом, оставаясь полностью в одном цикле? Чтобы еще раз пояснить, что я имею в виду, вот какой-то C++ код, который имеет те же функции, что и вышеуказанный код Python.
int a[] = {0, 1, 2, 3};
std::cout a[3] << std::endl;
for(int i = 0; i < 2; i++)
std::cout << a[i] << std::endl;
Он имеет тот же результат. Суть в том, для некоторых алгоритмов, я должен вручную дублировать содержание моих for
петель для определенных шагов. Например, если я хочу увидеть, равен ли первый элемент второй, второй - третьей и т.д., И, наконец, если последнее равно первому, мне придется вручную добавить этот шаг после или до цикла for
. --- if (a[0] == a[3]) foo();
Это то, что я должен делать в C++? Я совершенно новичок в этом, и я не хочу уходить корнями в плохие практики.
for (int i=3; i<(3 + size_of_array); ++i)
std::cout << a[i % size_of_array] << '\n';
Используйте алгоритмы std::begin()
и std::end()
.
int a[3]={1,2,3};
for( auto x=end(a)-1; x>=begin(a); --x){
cout<<*x<<endl;
}
Вышеуказанный код выводит 3 2 1
, порядок выдачи массива a
. Посмотрите на [begin()][1]
.
[]
для векторов или списков, чтобы при задании отрицательного числа x он выполнялся[size-x]
чтобы вы могли делать то же самое, что вы делаете в Python ...