std :: list iterator:获取下一个元素 [英] std::list iterator: get next element
本文介绍了std :: list iterator:获取下一个元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用存储在std :: list中的数据元素来构建一个字符串,其中我只想在元素之间放置逗号(即,如果元素在列表中是{A,B,C,D},结果字符串应为A,B,C,D。
I'm trying to build a string using data elements stored in a std::list, where I want commas placed only between the elements (ie, if elements are {A,B,C,D} in list, result string should be "A,B,C,D".
此代码不起作用:
typedef std::list< shared_ptr<EventDataItem> > DataItemList;
// ...
std::string Compose(DataItemList& dilList)
{
std::stringstream ssDataSegment;
for(iterItems = dilList.begin();
iterItems != dilList.end();
iterItems++)
{
// Lookahead in list to see if next element is end
if((iterItems + 1) == dilList.end())
{
ssDataSegment << (*iterItems)->ToString();
}
else
{
ssDataSegment << (*iterItems)->ToString() << ",";
}
}
return ssDataSegment.str();
}
如何使用迭代器获取std :: list中的the-next-item?我希望它是一个链表,为什么我不能进入下一个项目?
推荐答案
您无法执行 it + N
,因为您没有列表迭代器的随机访问权限。您只能使用列表迭代器一次执行一个步骤(这些是双向迭代器)。
You cannot do it + N
because you have no random access for list iterators. You can only do one step at a time with list iterators (these are bidirectional iterators).
您可以使用 boost :: next
和 boost :: previous
// Lookahead in list to see if next element is end
if(boost::next(iterItems) == dilList.end())
{
或者你可以打印逗号之前:
Or you can print the comma before:
std::string Compose(DataItemList& dilList)
{
std::stringstream ssDataSegment;
for(iterItems = dilList.begin();
iterItems != dilList.end();
++iterItems)
{
if(iterItems != diList.begin())
ssDataSegment << ",";
ssDataSegment << (*iterItems)->ToString();
}
return ssDataSegment.str();
}
这篇关于std :: list iterator:获取下一个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文