#c
Вопрос:
Я все еще изучаю insert()
C .
Зачем использовать iter =
здесь?
list<string> lst;
auto iter = lst.begin();
while (cin >> word)
iter = lst.insert(iter, word);
Почему не так, как сейчас?
list<string> lst;
auto iter = lst.begin();
while (cin >> word)
lst.insert(iter, word);
Я в замешательстве, потому что есть также этот случай, который не использует slist.begin() =
:
list<string> slist;
slist.insert(slist.begin(), "Hello!");
Комментарии:
1. пожалуйста, опубликуйте правильный код, а не код с ненужными синтаксическими ошибками.
1st
не является допустимым именем2. Возможно, вы ищете что-то вроде
std::back_inserter
того, что можно использовать вместе с перегрузкой итератораstd::list
конструктора ?3. @463035818_is_not_a_номер, Но в книге это используется в качестве названия… что также сбивает меня с толку
4. Это, вероятно
lst
, вместо1st
того, чтобы, если только в книге не было ошибки.5.Пожалуйста, прочтите о том, что
std::list::insert
возвращает функция .
Ответ №1:
Разница становится сразу очевидной, когда вы смотрите на вывод следующего ввода:
1
2
3
A:
#include <list>
#include <iostream>
using namespace std;
int main()
{
std::list<std::string> st;
auto iter = st.end();
std::string word;
while (cin >> word)
iter = st.insert(iter, word);
for (const autoamp; w : st) std::cout << w << " ";
}
выход:
3 2 1
B:
#include <list>
#include <iostream>
using namespace std;
int main()
{
std::list<std::string> st;
auto iter = st.end();
std::string word;
while (cin >> word)
st.insert(iter, word);
for (const autoamp; w : st) std::cout << w << " ";
}
выход:
1 2 3
Обратите внимание , что я использовал end()
вместо begin()
, потому begin()
что выглядит немного подозрительно, когда в списке еще нет элемента. Однако для пустого списка, begin() == end()
, поэтому это не меняет результат.
std::list::insert()
вставляет элемент перед элементом, на который ссылается переданный вами итератор, а затем возвращает итератор для вновь вставленного элемента. Следовательно, A вставляет следующий элемент всегда перед последним вставленным элементом. С другой стороны, B всегда вставляет следующий элемент в конец списка, потому iter
что всегда указывает на список end
.