изменить значение элемента в списке Переполнение стека

это то, что я делаю, я получаю некоторую информацию из файла .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 (), потому что я пытаюсь получить доступ к элементам списка, в любом случае я могу это сделать?

в основном то, что я пытаюсь сделать, это просто получить мои строки из одного списка и изменить их на целые числа, сохраняя формат списка

любая помощь будет очень признателен, спасибо

0

Решение

Тебе нужно (*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 быть особенно хорошим выбором. Даже ситуации, которые теоретически должны поддерживать связанный список, обычно этого не делают, по крайней мере, по моему опыту.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]