Есть ли лучшая практика для циклического «прохождения» массива в C ++?

0

В 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++? Я совершенно новичок в этом, и я не хочу уходить корнями в плохие практики.

  • 0
    Вы можете перегрузить оператор [] для векторов или списков, чтобы при задании отрицательного числа x он выполнялся [size-x] чтобы вы могли делать то же самое, что вы делаете в Python ...
  • 0
    «В Python каждый элемент массива можно сравнить со« следующим »элементом […] с помощью следующего кода:« ммм, нет?
Показать ещё 2 комментария
Теги:
arrays
for-loop

2 ответа

8
Лучший ответ
for (int i=3; i<(3 + size_of_array); ++i)
    std::cout << a[i % size_of_array] << '\n';
  • 3
    Спасибо. Это очень круто, потому что это универсально - я могу использовать его практически на любом языке!
1

Используйте алгоритмы 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].

  • 0
    Вопрос не в том, как перебирать массив в обратном порядке. Он спрашивает, как выполнить итерацию вперед, а затем, когда он доходит до конца, он хочет начать сначала.
  • 0
    @ BenjaminLindley Вопрос сделал!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню