我刚接触C++语言。我开始使用向量,并注意到在所有遍历向量的代码中,通过索引迭代时for循环的第一个参数总是基于这个向量的。在Java中,我可能会像这样使用ArrayList:
for(int i=0; i < vector.size(); i++){
vector[i].doSomething();
}
我不明白为什么在C++中找不到这个东西?这是一种不好的实践吗?
我刚接触C++语言。我开始使用向量,并注意到在所有遍历向量的代码中,通过索引迭代时for循环的第一个参数总是基于这个向量的。在Java中,我可能会像这样使用ArrayList:
for(int i=0; i < vector.size(); i++){
vector[i].doSomething();
}
我不明白为什么在C++中找不到这个东西?这是一种不好的实践吗?
for
循环和迭代器,则更少出现错误。语言的语义和编译器的类型检查机制将防止您意外访问使用错误索引的数组。 //different declaration type
vector<int>v;
vector<int>v2(5,30); //size is 5 and fill up with 30
vector<int>v3={10,20,30};
//From C++11 and onwards
for(auto itr:v2)
cout<<"\n"<<itr;
//(pre c++11)
for(auto itr=v3.begin(); itr !=v3.end(); itr++)
cout<<"\n"<<*itr;
int main()
{
int n;
int input;
vector<int> p1;
vector<int> ::iterator it;
cout << "Enter the number of elements you want to insert" << endl;
cin >> n;
for (int i = 0;i < n;i++)
{
cin >> input;
p1.push_back(input);
}
for(it=p1.begin();it!=p1.end();it++)
{
cout << *it << endl;
}
//Iterating in vector through iterator it
return 0;
}
传统迭代器形式
如果你使用
std::vector<std::reference_wrapper<std::string>> names{ };
for (auto element in : names)
{
element.get()//do something
}
std::vector<int>::size_type i = 0;
吗?或者可能是std::vector<int>::iterator it = vector.begin();
? - chrisstd::vector
时,什么是最好/最短的方法?”实际上,这里所问的问题是:“我为什么看不到这种用法在C ++中?它是不好的编程习惯吗?”也就是说,“为什么我总是看到在迭代std::vector
时使用迭代器的C++代码?” - Alok Save