更改列表c ++中元素的值

时间:2012-10-04 00:56:53

标签: 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()));

我不能使用c_str(),因为我试图访问列表的元素,无论如何我可以这样做?

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

任何帮助都会非常感谢谢谢

1 个答案:

答案 0 :(得分:5)

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

你可能希望整个工作有点不同,特别是在一种不需要你直接处理迭代器的方式。例如,让我们假设你拥有的是:

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

然后我几乎肯定会用std::transform完成这项工作,可能是这样的:

std::transform(strings.begin(), strings.end(), std::back_inserter(ints),
    [](std::string const &in) { return atoi(in.c_str()); });

或:

transform(begin(strings), end(strings), std::back_inserter(ints),
          [](string const &in) { return stoi(in); });

如果您不熟悉它,那最后一行是lambda(C ++ 11的新版本)。假设您正在使用一个相当新的编译器(例如,gcc 4.7.x或更新版本,VC ++ 2010或更新版本),它应该不是问题。

我还要认真考虑使用std::vector代替std::list。我几乎从未发现std::list是一个特别好的选择。即使理论上有利于链表的情况通常也没有,至少在我的经验中是这样。