gpt4 book ai didi

c++ - 显示 vector 的迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:07 24 4
gpt4 key购买 nike

我正在做一个项目,我将一个枚举放入一个 vector 中。我想知道如何从 vector 中获得这样的功能。

for(int ii = 0; ii < thing.getSize(); ii++){
cout << "thing(" << ii << ") = " << toString(thing[ii]) << endl;
}

我已经尝试了大约 5 种不同的方法来执行此操作,但似乎都不起作用。我已经通读了 MSDN vector(vector::end() 似乎最有帮助,直到它说运算符<<不会接受 ii 作为迭代器。

有人可以帮帮我吗?我认为最接近的是

vector<int>::iterator ii;
for(ii = things.begin(); ii != things.end(); ii++){ //764
cout << "thing(" << (int)ii << "): " << toString(things[ii]) << endl; //765
}

但这会引发错误,要么没有意义,要么我不知道如何解决。

1>c:\...\Project.cpp(764): error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::_Vector_iterator<_Myvec>' (or there is no acceptable conversion)
1>c:\...\Project.cpp(765): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::_Vector_iterator<_Myvec>' (or there is no acceptable conversion)
1>c:\...\Project.cpp(765): error C2679: binary '[' : no operator found which takes a right-hand operand of type 'std::_Vector_iterator<_Myvec>' (or there is no acceptable conversion)

最佳答案

正确的通用方法是

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。因为它有一个为其定义的流运算符。

关于c++ - 显示 vector 的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com