我是新手。
如何从迭代器访问对象?我有类似的东西:
boost::container::vector<std::string>::iterator plitr = myvec.begin();
while (plitr != myvec.end()){
std::cout << "data at index[" << plitr - myvec.begin() << "]: " << plitr->x <<std::endl;
plitr++;
}
但是我意识到
plitr->x
不存在,也不确定是否可以按照我的想法计算索引。有人可以帮忙吗?
最佳答案
boost::vector
的用法与std::vector
相同。因此计算索引的方式与您显示的方式相同,因为迭代器满足随机访问条件。关于对对象的访问,您想取消对迭代器的引用。将循环更改为
while (plitr != myvec.end()){
std::cout << "data at index[" << plitr - myvec.begin() << "]: " << *plitr <<std::endl;
plitr++;
}
它将起作用(请注意
*plitr
,而不是取消引用的部分)。就像一个旁注,使用基于范围的for循环访问std::string
中的每个myvec
在这里可能更方便:for (auto&& str : myvec)
std::cout << str << std::endl;