遍历 std:list<wstring>

Posted

技术标签:

【中文标题】遍历 std:list<wstring>【英文标题】:Iterating through std:list<wstring> 【发布时间】:2012-04-17 18:55:12 【问题描述】:

这是我的代码:

for (std::list<std::wstring>::iterator itr  = kb->titles.begin(); itr != kb->titles.end() ; itr++)
    
        _size += *itr.size();
    

我想要做的是访问列表中包含的每个 wstring 并调用它的 size() 成员函数。但是,itr 指出的似乎不是迭代的 wstring 元素,我收到错误(错误 C2039: 'size' : is not a member of 'std::_List_iterator<_mylist>')

如果您想知道 kb 是什么,它是指向以 std::list&lt;std::wstring&gt; titles; 作为其成员之一的结构的指针。

关于如何解决这个问题的任何想法?

【问题讨论】:

使用 C++11,使用 ranged-for 循环变得容易:for (auto title : titles) _size += title.size(); @chris 在这种情况下你可能希望它是for( const auto&amp; title : titles ) /* .. */ @Prætorian,哎呀,你是对的。我打算在那里放一个 const ,每个都是 wstring 所以是的 :) 谢谢你的理解。 【参考方案1】:

操作符优先级是这里的问题,试试

_size += (*itr).size();

甚至更好,

_size += itr->size();

【讨论】:

【参考方案2】:

您缺少括号:

_size += (*itr).size();
_size += itr->size();

两者都应该工作。

【讨论】:

以上是关于遍历 std:list<wstring>的主要内容,如果未能解决你的问题,请参考以下文章

无法修改 const wchar 的向量 *

List的遍历——list iterator not incrementable

遍历std::list过程中删除元素后继续遍历过程

std::list< std::unique_ptr<T> >:传递它

stl的erase()陷阱--迭代器失效总结

无法反序列化 std::list<std::string>