我有一些firstname_list
是指针的向量(数据类型字符串)的东西。所以它看起来像vector <string*> firstname_list;
。在此内部,存储字符串的地址。如果我尝试做这样的事情:
cout << *(firstname_list[0]);
它会取消引用地址并给我我需要的字符串。
但是,我尝试使用迭代器创建一个循环,我在这个网站上读过,我试过这个:
vector<string*>::iterator iter;
for (iter = firstname_list.begin(); iter != firstname_list.end(); ++iter)
cout << *(firstname_array[iter]);
但是,现在它不会打印而是会出错:
error C2679: binary '[' : no operator found which takes a right-hand operand of type
'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<cha
r,std::char_traits<char>,std::allocator<char>> *>>>' (or there is no acceptable conversion)
我已经看过其他与此相似的线程,人们会问如何迭代循环,但我仍然无法弄明白。任何有关我收到此消息的帮助都表示赞赏!
答案 0 :(得分:5)
好吧,如果你正在使用C ++ 11,那么你很幸运。
for (const auto& str: firstname_list)
std::cout << *str << std::endl;
否则:
vector<string*>::iterator iter;
for (iter = firstname_list.begin(); iter != firstname_list.end(); ++iter)
std::cout << **iter;
注意:如评论中所述,您必须取消引用迭代器两次。如果它指向char *
,则单个星号就可以了。