将元素从列表<string>Mylist 复制到字符串 Mystr


list<string> mylist;
mylist.push_back("random stuff");
list<string>::iterator it;
it=mylist.begin();
string mystr;
//and this doesn't work:
mystr=*it;

假设我有一个list<string> mylist,它有3个元素。由于我不能处理每个元素的字符,我必须将我想要的项目复制到一个简单的字符串或字符缓冲区中。但我根本找不到方法,我也试过指向数组的指针。那么有没有办法把这些项目从列表中复制出来呢?

编辑:是的对不起,重新审视我的代码,项目,和发现错误somewere别的,我从listmylist复制到一个字符串mystr,迭代器的帮助下,我使用一个for循环,条件停止当它遇到字符" 0"把我复制它的时候,它没有复制' 0 '在我的字符串,所以最后我不得不把它手动函数不会工作外的字符串好的代码:

    string temp;
    list<string>::iterator it;
    it=mylist.begin();//let's say myslist has "random stuff"
    temp=*it;//this does not copy the ''
    temp+='';//so i add it myself 
    for(int n(0);temp[n]!='';n++)//now the for loop stops properly
        cout<<temp[n];

如果您想要字符串中的字符:

for (std::string::iterator it=mystr.begin(); it!=mystr.end(); it++)
{
     char ch = *it;
     // do something with the character?
}

如果您想将字符串作为C(零终止)字符串传递,请使用

mystr.c_str()

代码运行良好并输出正确的结果。此外,您还可以像这样处理每个元素的字符:

for (list<string>::iterator iter = mylist.begin(); iter != mylist.end(); ++iter)
{
    char c = (*iter)[0];  //this is the first character.
}

你也可以用迭代器遍历字符串,甚至字符串也有迭代器:)尽管字符串支持随机访问迭代器,所以你可以像我在for循环中展示的c-string那样访问它们。

您是否正在寻找

list<string> mylist;
mylist.push_back("random stuff");
list<string>::iterator it = it=mylist.begin();
string& mystr = *it; // Note the &

类型string&是对字符串的引用。它为列表的第一个元素引入了一个新名称。至少现在是第一个元素。当然,你也可以做mylist_push_front("Hi There");mystr,它们仍然是"随机的东西"。但是如果你现在输入mystr = "Not so random stuff";,你将改变列表中的字符串。

注意,这是显式而不是副本。

小警告:mystr不会神奇地保持字符串存活。如果从列表中删除底层字符串,则必须停止使用mystr

最新更新