2012-07-08 39 views
2

是否可以遍历const vector<int>?或者,这会不可取吗?是否可以迭代'const vector <int>`?

鉴于我有它返回一个vector<int>我可以遍历它具有以下功能getIntVector

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重新创建....

+8

'const_iterator' – 2012-07-08 19:27:55

回答

7

1)你需要一个vector<int>::const_iterator通过一个“常量”容器重复

2)你的载体仍然会被复制;这可能是也可能不是需要的。我想返回引用...

+0

啊,谢谢。你能解释它为什么仍然会被复制,并且“我喜欢返回引用”,你的意思是返回一个指向原始向量的指针吗?谢谢。 – Ross 2012-07-08 19:32:13

+1

@Ross,http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c – chris 2012-07-08 19:36:00

+1

@Ross不管你做什么,不回引用局部变量。 – 2012-07-08 20:05:44

4

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

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

+2

或者只是'为(INT I:getIntVector())'如果你不关心'it'在所有和只是想快速迭代。 – MSalters 2012-07-08 21:28:04

相关问题