C++ 更改列表c和x2B中元素的值+;

C++ 更改列表c和x2B中元素的值+;,c++,list,atoi,c-str,C++,List,Atoi,C Str,这就是我所做的,我从一个.txt文件中获取一些信息,这些是数字,当然,当我获取它们时,我将它们作为字符串列表中的字符串…(我知道可能是字符,但在本例中是字符串),所以当我将它们插入另一个列表时,应该是这样的 list<int> l; //i is the iterator for the 1st list that already has all the strings l.push_back(atoi(*i.c_str())); 列表l; //i是已经包含所有字符串的第一个列表

这就是我所做的,我从一个.txt文件中获取一些信息,这些是数字,当然,当我获取它们时,我将它们作为字符串列表中的字符串…(我知道可能是字符,但在本例中是字符串),所以当我将它们插入另一个列表时,应该是这样的

list<int> l;

//i is the iterator for the 1st list that already has all the strings
l.push_back(atoi(*i.c_str()));
列表l;
//i是已经包含所有字符串的第一个列表的迭代器
l、 向后推(atoi(*i.c_str());
我无法使用c_str(),因为我正在尝试访问列表中的元素。我是否可以这样做

基本上,我要做的就是从一个列表中获取字符串并将其更改为整数,同时保持列表格式

如果您需要任何帮助,我们将不胜感激。谢谢您所需的
(*i).c_str()
i->c_str()

您可能希望以一种完全不同的方式来完成整个工作,特别是以一种根本不需要直接处理迭代器的方式。例如,假设您拥有的是:

list<string> strings;
list<int> ints;
或:

如果您不熟悉,最后一行是lambda(C++11新增)。假设您使用的是一个相当新的编译器(例如GCC4.7.x或更高版本,VC++2010或更高版本),这应该不会是一个问题

<>我也认真考虑使用<代码> STD::vector < /COD>而不是<代码> STD::列表< /C>。我几乎从未发现
std::list
是一个特别好的选择。即使在理论上有利于链表的情况下通常也不会,至少在我的经验中是这样。

你需要
(*i).c_str()
i->c_str()

您可能希望以一种完全不同的方式来完成整个工作,特别是以一种根本不需要直接处理迭代器的方式。例如,假设您拥有的是:

list<string> strings;
list<int> ints;
或:

如果您不熟悉,最后一行是lambda(C++11新增)。假设您使用的是一个相当新的编译器(例如GCC4.7.x或更高版本,VC++2010或更高版本),这应该不会是一个问题


<>我也认真考虑使用<代码> STD::vector < /COD>而不是<代码> STD::列表< /C>。我几乎从未发现
std::list
是一个特别好的选择。即使在理论上有利于链表的情况下通常也不会,至少在我的经验中是这样。

我不知道我是否正确理解了你的问题,但如果我理解了,不是吗?如果你要使用c++11,您也可以使用
std::stoi
。:-]使用
std::vector
,您还将受益于事先调用
ints.reserve(strings.size())
。哇,回答太棒了,我在使用c++11,但我还不习惯。非常感谢much@Makenshi:从ildjarn的评论中可以看出,我还不习惯它添加的所有内容。@ZanLynx:
stoi
对于
std::string
std::wstring
是重载的,所以我认为您需要显式强制转换才能编译。如果您要使用C++11,您也可以使用
std::stoi
。:-]使用
std::vector
,您还将受益于事先调用
ints.reserve(strings.size())
。哇,回答太棒了,我在使用c++11,但我还不习惯。非常感谢much@Makenshi:从ildjarn的评论中可以看出,我还不习惯它添加的所有内容。@ZanLynx:
stoi
对于
std::string
std::wstring
是重载的,所以我认为您需要显式强制转换才能编译它。
transform(begin(strings), end(strings), std::back_inserter(ints),
          [](string const &in) { return stoi(in); });