C++ 向向量显示迭代器
我正在做一个项目,在这个项目中,我把一个枚举放到一个向量中。我想知道如何从向量中获得这样的功能C++ 向向量显示迭代器,c++,vector,cout,C++,Vector,Cout,我正在做一个项目,在这个项目中,我把一个枚举放到一个向量中。我想知道如何从向量中获得这样的功能 for(int ii = 0; ii < thing.getSize(); ii++){ cout << "thing(" << ii << ") = " << toString(thing[ii]) << endl; } 我试过5种不同的方法,但似乎都不管用。我已经通读了MSDN vector::end似乎是最有用的,直到它
for(int ii = 0; ii < thing.getSize(); ii++){
cout << "thing(" << ii << ") = " << toString(thing[ii]) << endl;
}
我试过5种不同的方法,但似乎都不管用。我已经通读了MSDN vector::end似乎是最有用的,直到它说操作符Try:
尝试:
迭代器的行为非常类似于指针:它们指示值的位置,您需要取消对它们的引用以获得值:
std::cout << *ii;
迭代器的行为非常类似于指针:它们指示值的位置,您需要取消对它们的引用以获得值:
std::cout << *ii;
正确的通用方法是
for(std::vector<int>::const_iterator ii=things.begin();
ii != things.end(); ++ii)
{
std::cout << "thing("
<< std::distance(things.begin(), ii)
<< "): " << *ii << std::endl;
}
是通过取消对迭代器的引用并使用std::distance来获取从开始到结束的距离
此外,通常认为导入整个名称空间是不好的,最好使用显式using语句,或者在名称空间中使用前缀类型
对于迭代器,通常最好使用前缀增量运算符
另外,除非您正在进行一些有趣的格式化,否则无需对int应用“toString”。因为它定义了一个流运算符。正确的通用方法是
for(std::vector<int>::const_iterator ii=things.begin();
ii != things.end(); ++ii)
{
std::cout << "thing("
<< std::distance(things.begin(), ii)
<< "): " << *ii << std::endl;
}
是通过取消对迭代器的引用并使用std::distance来获取从开始到结束的距离
此外,通常认为导入整个名称空间是不好的,最好使用显式using语句,或者在名称空间中使用前缀类型
对于迭代器,通常最好使用前缀增量运算符
另外,除非您正在进行一些有趣的格式化,否则无需将“toString”应用于int。因为它定义了一个stream操作符。事情必须声明为:
vector < int > things;
然后像这样迭代:
for ( vector < int >::iterator i = things.begin(); i != things.end(); ++i )
{
cout << "things( " << ( i - things.begin() ) << " ): " << toString( *i ) << endl;
}
必须声明:
vector < int > things;
然后像这样迭代:
for ( vector < int >::iterator i = things.begin(); i != things.end(); ++i )
{
cout << "things( " << ( i - things.begin() ) << " ): " << toString( *i ) << endl;
}
东西是什么类型的?此外,循环中每个步骤的值将以*ii为单位。ii指向向量中的当前位置。如果你需要显示循环计数器,你需要另一个变量来表示另一个int,你可以在for循环中与ii一起递增。我将尝试单独的计数器,迭代器不是索引,它更像指针。事情[ii]完全错了,使用*ii。打印出迭代器是没有意义的,它没有对最终用户有用的信息,就像指针一样。第764行没问题,我不知道编译器为什么会抱怨。试着用一个10行的程序来演示同样的错误。如果你想用一个向量
包含一个完整的名称空间是非常糟糕的,因为当您使用多个名称空间时,共享名称或成员不是标准规定的使用名称空间不支持编译器。使用名称空间与合并当前名称空间和导入的相同,如果当前名称空间是全局名称空间,那么首先您已经使用并否定了NAEMSPACE。确定更改向量迭代器的类型后,它确实起作用。忽略lastok更改向量迭代器的类型后,它确实起作用。忽略最后一个选项如果您使用的是不同的类型(如枚举),则会声明向量内容;,然后,当声明迭代器时,它将是vector::iterator Alternative,如果您使用的是不同的类型,如枚举,则会声明vector things;,然后,当声明迭代器时,它将是vector::iterator