【问题标题】:Iterating through a vector of pointers and printing out values? [duplicate]遍历指针向量并打印出值? [复制]
【发布时间】:2016-08-17 23:50:49
【问题描述】:

我有一些东西,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)

我查看了与此类似的其他线程,其中人们询问如何迭代循环,但我仍然无法弄清楚。对于我收到此消息的原因的任何帮助,我们将不胜感激!

【问题讨论】:

  • cout &lt;&lt; *iter
  • firstname_list, firstname_array 什么??请保持一致。
  • cout
  • 我很好奇你为什么需要vector&lt;string*&gt; 而不是vector&lt;string&gt;

标签: c++


【解决方案1】:

好吧,如果您使用的是 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;

注意: 如 cmets 中所述,您必须取消对迭代器的引用两次。如果它指向char *,那么一个星号就可以了。

【讨论】:

  • "for (const auto &str: firstname_list)" 会更好。
  • 第二个也需要 C++11 (auto)。此外,要打印字符串(而不是指针),您需要取消引用两次。 std::cout &lt;&lt; **iter;
  • 你我的朋友是个巫师,谢谢
  • @StacksAndParsing,我不能成为巫师。我只是……哈利。只是哈利...... :)
猜你喜欢
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多