это то, что я делаю, я получаю некоторую информацию из файла .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 (), потому что я пытаюсь получить доступ к элементам списка, в любом случае я могу это сделать?
в основном то, что я пытаюсь сделать, это просто получить мои строки из одного списка и изменить их на целые числа, сохраняя формат списка
любая помощь будет очень признателен, спасибо
Тебе нужно (*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); });
В случае, если вы не знакомы с этим, последняя строка является лямбда (новый с C ++ 11). Если вы используете довольно новый компилятор (например, gcc 4.7.x или новее, VC ++ 2010 или новее), это не должно быть проблемой.
Я также серьезно подумал бы об использовании std::vector
вместо std::list
, Я практически не нашел std::list
быть особенно хорошим выбором. Даже ситуации, которые теоретически должны поддерживать связанный список, обычно этого не делают, по крайней мере, по моему опыту.
Других решений пока нет …