2010-05-07 93 views
2

我的例子如下。我发现问题是在函数void test的参数中使用“const”。我不知道为什么编译器不允许。有人可以告诉我吗?谢谢。为什么我不能用迭代器访问const向量?

vector<int> p; 

void test(const vector<int> &blah) 
{ 
    vector<int>::iterator it; 
    for (it=blah.begin(); it!=blah.end(); it++) 
    { 
     cout<<*it<<" "; 
    } 
} 

int main() 
{ 
    p.push_back(1); 
    p.push_back(2); 
    p.push_back(3); 
    test(p); 

    return 0; 
} 
+6

vector :: const_iterator – bmargulies 2010-05-07 21:51:09

回答

16

iterator定义为返回对包含对象的引用。如果允许的话,这将破坏向量的常量。改为使用const_iterator

+0

我在linux平台上用qt创建器试过它,没有const_iterator – 2010-05-07 22:35:27

+2

@yan所有的STL容器都有'const_iterator'。你可以声明'vector :: const_iterator',而不是像'vector :: iterator'这样的声明。它将在任何符合标准的STL实现中出现。海湾合作委员会有它。视觉工作室有它。在这一点上,我希望任何编译器,即使最近模糊,也会有它。如果它不在那里,我会惊呆了。如果您遇到问题,您可能会声明或使用它。 – 2010-05-07 23:14:29

+0

@Jonathan,任何符合标准的实现都有关于STL容器的声明/定义。非STL兼容的容器可以自由地做,因为他们认为合适... – 2010-05-07 23:44:34

相关问题