用C++迭代向量

Bla*_*lab 0 c++ iterator vector

因此,根据我发现的其他示例,我会相信这将是迭代m_v​​ect的正确代码:

for(vector<T>::iterator it = m_vect.begin(); it != m_vect.end(); ++it)
Run Code Online (Sandbox Code Playgroud)

但是,在尝试编译时,我在该行上收到以下错误:

heap.h:167:6: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope
Run Code Online (Sandbox Code Playgroud)

就像我说的那样,我从另一段代码中复制并修改了这一行,所以我真的不确定我做的是非对错.任何见解?

为了澄清,这是一个模板函数,我已经声明了'模板'.m_vect是vector类型.Aaaand我不知道如何显示小于和大于正确...

woo*_*tar 6

值得庆幸的是,在C++ 11中,你可以让编译器搞清楚.编译器已经知道m_vect是什么,所以你可以告诉它:

for (auto it= m_vect.begin(); ( it != m_vect.end()) ; ++ it ) { }
Run Code Online (Sandbox Code Playgroud)

但等等,还有更多.在c ++ 11中,您甚至可以迭代所有内容m_vect

for (auto it : m_vect ) { }
Run Code Online (Sandbox Code Playgroud)

你能否说我认为在C++ 03中迭代是疯了,我从未在现实生活中看到过任何人这样做,而在C++ 11中,它的表现要好上千倍?