[英]How do I iterate vector
我有這樣的代碼
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void removeFirstFromVec(vector<int> & vecLink) {
// remore first element from some vector
vecLink.erase(vecLink.begin() + 0);
}
int main()
{
vector<int> myVec;
myVec.push_back(1);
myVec.push_back(2);
myVec.push_back(3);
cout << "Before removal\n";
for (auto & i : myVec) {
cout << myVec[i-1] << endl;
}
removeFirstFromVec(myVec);
cout << "After removal\n";
for (auto & i : myVec) { // starts with 2
cout << myVec[i-1] << endl;
}
return 0;
}
但是在我發表評論的地方,它以 2 而不是 0 開頭,這會導致錯誤。 我做錯了什么,或者有沒有辦法使用類似auto & i: myVec
而不是for (int i = 0; i <...size(); i++)
之類的簡短內容而不會出現此類錯誤
在基於范圍的 for 循環中
for (auto & i : myVec) {
cout << myVec[i-1] << endl;
}
i
是向量的元素,而不是索引。 它應該是
for (auto & i : myVec) {
cout << i << endl;
}
迭代返回項目本身,而不是索引。
vector<int> vec { 5, 3, 2 };
for (int i: vec) {
cout << i << endl;
}
請問output這個:
5
3
2
如果您執行以下操作:
使用模板函數接受向量的任何類型。
使用直接初始化方法而不是push_back()
以避免大量行。
單一語法的大括號是可選的。 在編寫復雜程序時避免使用它以減少混淆。
然后您可以以更好的方式編寫相同的代碼(不要忘記注釋):
#include <iostream>
#include <vector>
using namespace std;
// defining a templated-function
template<class T>
void removeFirstFromVec(vector<T>& vecLink) {
vecLink.erase(vecLink.begin());
}
int main(void) {
// initializing with direct-initialization method
vector<int> myVec {1, 2, 3};
cout << "Before removal\n";
// no braces
for (auto& i : myVec)
// 'i' isn't an index here, it's an element
cout << i << endl;
removeFirstFromVec(myVec);
cout << "After removal\n";
// no braces
for (auto& i : myVec)
cout << i << endl;
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.