使用迭代器在矢量 C++ 中循环
loop in vector c++ using iterator
我有这个代码:
std::vector<A>::iterator it;
for(auto it = m_vA.begin(); it != m_vA.end(); it++)
我有一个错误:
ISO C++ forbids declaration of 'it' with no type
cannot convert '__gnu_cxx::__normal_iterator<A* const*, std::vector<tp::Vehicule*, std::allocator<A*> > >' to 'int' in initialization
和如果我删除自动
erreur: no match for 'operator=' in 'it = ((const B*)this)->B::m_vA.std::vector<_Tp, _Alloc>::begin [with _Tp = A*, _Alloc = std::allocator<A*>]()'
B 是带有我的循环的类
谢谢
对于auto
您似乎没有启用 c++11,如果您启用它,您应该删除以下行:
std::vector<A>::iterator it;
如果您无法使用 c++11 并且在删除 auto 后出错,看起来您将此代码放入 const 方法中,因此将迭代器替换为 const_iterator:
std::vector<A>::const_iterator it;
for(it = m_vA.begin(); it != m_vA.end(); it++)
你也可以把它变成一行,如果你在循环后不需要这个迭代器:
for(std::vector<A>::const_iterator it = m_vA.begin(); it != m_vA.end(); it++)
据我所知,您使用的是const
方法,您应该使用 const_iterator
,或删除const
。
如果您之前声明了变量,则不需要auto
。它不会产生错误,只是一个警告,但你必须选择一种方式或另一种方式;)
要解决您的问题,请删除auto
关键字。
您必须启用 C++11 才能使用此类auto
。如果您使用的是 gcc 编译器,则可以通过-std=c++11
或-std=c++0x
编译器的开关来启用它。
目前,它使用auto
旧 C 编译器继承的关键字,该关键字将被省略。编译器认为您再次声明it
但没有类型。
如果您确实启用了C++11,那么为什么要使用这样的auto
?只需使用基于范围的 for 循环:
for (auto i : m_vA)
// do stuff here with i
此外,您的代码的问题在于您指定了it
的类型,因此在 for 循环中使用 auto
是没有意义的。同样,如果你使用的是C++11,你应该使用上面的循环,因为它更容易编写和理解。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串