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
。