2

是否可以迭代 a const vector<int>?或者,这无论如何都是不可取的?

鉴于我有getIntVector返回 a 的函数,vector<int>我可以使用以下内容对其进行迭代:

vector<int> vec = getIntVector();
vector<int>::iterator it;
for (it=vec.begin();it!=vec.end();++it) {} 

但我不能做以下事情:

const vector<int> vec = getIntVector();
vector<int>::iterator it;
// complier throws error below
for (it=vec.begin();it!=vec.end();++it) {} 

我的想法是不会通过将向量声明为const...来重新创建向量。

4

4 回答 4

7

1)您需要vector<int>::const_iterator遍历“const”容器

2)您的矢量仍将被复制;这可能是可取的,也可能不是可取的。我喜欢返回参考...

于 2012-07-08T19:30:07.787 回答
7

如果您使用的是 C++11,则可以使用auto, 并让编译器从初始化中推断类型:

for (auto it=vec.begin(); it!=vec.end(); ++it) 
   //^^^^ compiler will infer the type using the initialization expression

但是,在 C++03 中,您必须使用const_iterator.

于 2012-07-08T19:32:54.920 回答
5

改为使用vector<int>::const_iterator

于 2012-07-08T19:28:45.540 回答
4

您可以使用vector<int>::const_iterator.

于 2012-07-08T19:29:14.627 回答