std :: list iterator:获取下一个元素 [英] std::list iterator: get next element

查看:205
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆