如果您要訪問同時在你的循環體中兩個向量,唯一的辦法是正常的:
for (size_t i=0; i<std::max(student_ids.size(),teacher_ids.size()); i++) {
if (i<student_ids.size()) // are there still students ?
cout << student_ids[i];
cout <<" : ";
if (i<teacher_ids.size()) // are there still teachers ?
cout << teacher_ids[i];
cout<<endl;
}
但我從你的例子中明白,你正在尋找遍歷兩個向量,按順序,並且你正在尋找一種方便的方法來避免冗餘代碼。
如果你不想寫,因爲一個非常複雜的身體的兩個環一前一後,如果你不想把這個身體變成一個功能,因爲獲得了大量的局部變量作拉姆達出來的:
auto f = [&](int& id) { cout << id<<endl; }; // could be more complex !
for_each(student_ids.begin(), student_ids.end(), f);
for_each(teacher_ids.begin(), teacher_ids.end(), f);
另外,您可以使用臨時合併向量來遍歷:
auto temp(student_ids);
copy(teacher_ids.begin(), teacher_ids.end(), back_inserter(temp));
for (auto &id : temp)
cout << id<<endl;
Online demo
使用簡單的'for'沒有基於範圍的循環 – malchemist
使用良好的ol'for循環或提升:: zip – bolov
你不能,你必須使用其他方法(兩個循環?循環使用索引?) –