使用迭代器在矢量 C++ 中循环

loop in vector c++ using iterator

本文关键字:C++ 循环 迭代器      更新时间:2023-10-16

我有这个代码:

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,你应该使用上面的循环,因为它更容易编写和理解。