Я хочу посетить каждый элемент набора ровно один раз, так как его размер увеличивается при обходе. Есть ли способ сделать это? - iamrohitbanga 1 час назад
В вашем коде a1 = [3, 4, 5]. Затем вы получаете итератор, который указывает на начало a1, которое равно «3». Затем вы вставляете новые элементы в a1, что приводит к [1, 2, 3, 4, 5, 6]. Тем не менее, вы по-прежнему указываете на то же значение, «3». Так что теперь вы продолжаете итерацию, и вы напечатаете 3, 4, 5, 6.
До сих пор неясно, почему вы хотите вставить список после получения итератора. Почему вы не можете вставить элементы до того, как итерирует их, как упомянул @camh?
Если вы все еще хотите это сделать, используйте вектор, поскольку это позволит вам добавлять элементы в конец списка, а это означает, что вы все равно будете указывать на «3», но список теперь будет [3 , 4, 5, 1, 2, 6], и те будут напечатаны в таком порядке.
Или добавить это:
for (iter = a1.begin(); iter != a1.end(); ++iter)
{
if (x == 0) {
x = 1;
a1.insert(a2.begin(), a2.end());
// Reset the iterator since we've modified the list
iter = a1.begin();
}
cout << *iter << endl;
}
Это некрасивый взломанный код, который будет работать только при определенных обстоятельствах. Лучшее решение - @ camh's. Если у вас есть причина, по которой вы не можете сделать это таким образом, нам нужны более подробные сведения.