Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AnreyKazakov
Заблокирован
#1

insert работает как-то странно - C++

17.09.2012, 21:25. Просмотров 495. Ответов 4
Метки нет (Все метки)

По задумке при последовательном вводе чисел 1, 2, 3 и тд на экране должно появится
2
2
1
1 и тд
а выходит
2
1
2
1...и тд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <deque>
#include <iterator>
#include <string>
using std::cin;using std::cout; using std::endl; using std::getline; using std::string; using std::deque;
int main(){
    string line;
    deque<string> deq;
    deq.push_back("");
    deque<string>::iterator iter=deq.begin();
    while(getline(cin,line)){
        deq.push_front(line); //здесь должен добавиться элемент в начало контейнера
        deq.insert(iter,line);  //здесь элемент должен добавиться !перед прошлым элементом, 
//но т к такого нет, то предполагалось, что он создастся и итератор=позиции этого элемента
//при добавлении двойки, она доб опять в начало , insert по идее должен вставить элемент
//между 1 и 2 (0 и 1) элементом контейнера, тогда бы получилось 2211, но не работает так...
        }
    for(deque<string>::iterator ix=deq.begin();ix!=deq.end();++ix){cout<<*ix<<endl;}    cout<<endl;
    //for(deque<string>::reverse_iterator riter=deq.rbegin();riter!=deq.rend();++riter){
        cout<<*riter<<endl;
        }
    return 0;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 21:25     insert работает как-то странно
Посмотрите здесь:

Странно работает класс - C++
Создал класс, который должен рисовать таблицу. #pragma once typedef struct tagSECTOR { int Min; int Max; } SECTOR;

Странно работает тернарная операция - C++
Доброй ночи... if((i == 3)?(!(*BoolHash)):((*BoolHash))) cout &lt;&lt; &quot;\nError\n&quot;; else {// Выполнение функции} Если i = 1 или 2...

С++ debian - программа работает странно - C++
Добрый день всем. может кто знает в чём дело вот программа #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include...

Странно работает перегрузка оператора - C++
Пример кода#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Logic { public: bool v; // логическое...

Почему так странно работает калькулятор - C++
Здраствуйте, я сегодня решил взяться за C++, решил написать самое простое, калькулятор: #include &lt;cstdlib&gt; #include &lt;iostream&gt; ...

Есть структура, работает, но странно сравнивает( - C++
Написал программу, но когда она сравнивает номер маршрута с номером введенным с клавиатуры, она всегда пишет Error! , когда сравниваю по...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
17.09.2012, 21:31     insert работает как-то странно #2
У тебя deq.begin(); берет адрес первого эл-та в самом начале и дальше прога всегда работает с ним и он указывает на тот же адрес памяти
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
17.09.2012, 22:30     insert работает как-то странно #3
Как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
string line;
deque<string> deq;
auto iter=deq.begin();
while(getline(cin,line))
{
    deq.push_front(line); 
    iter = deq.begin();
    deq.insert(iter,line);
}
for(auto ix=deq.begin(); ix!=deq.end(); ++ix)
       {cout<<*ix<<endl;}    
cout<<endl;
AnreyKazakov
Заблокирован
17.09.2012, 22:44  [ТС]     insert работает как-то странно #4
Ничего не понял. По идее - insert вставляет элемент перед! элементом на который указывает итератор, значит сначала он вставляет элемент перед первым и переводит итератор на него, на 0, далее в начало вставляется еще элемент push_front, но итератор то не меняет свое положение, а я думал он автоматом плюс 1 переходит...он опять вставляет перед первым...1
Все равно даже в таком случае он должен выдать 2211
А не 2121...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2012, 23:36     insert работает как-то странно
Еще ссылки по теме:

Класс множество, странно работает код - C++
Помогите пожалуйста понять почему код не всегда работает. Есть класс, содержащий массив. Мне нужно создать объект класса, чей массив...

прога странно работает=) кому интересно покопать? - C++
написал прогу по подсчету crc-16 (сама функция с википедии).. так вот... когда скармливаю файл (текстовыми кормлю) на несоклько килобайт (1...

Как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1)? - C++
Добрый день.Подскажите пожалуйста как работает функция insert(то есть что надо отправлять что бы строка s вставлялась в строку s1).Заранее...

Как то странно выводит матрицу. - C++
Помогите, пожалуйста. Написал код для вывода матрицы.Но при наборе как то странно выводит матрицу,последние элементы не те!Хотел скриншот...

Циклы ведут себя как-то странно - C++
#include &lt;iostream&gt; using namespace std; int main() { float A={1,2,3,4,5,6,7,8,9,10}; float MAX=0; int I; int sum=0; ...

приоритет. странно - C++
привет всем прогерам С++ =) есть такой вопрос. Вроде ни чего сложного, но компилятор компилит это дело не так как ожидается. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
17.09.2012, 23:36     insert работает как-то странно #5
Когда вставляешь перед первым элементом, deque создаёт новый блок памяти и у себя в списках помечает что он идет перед тем который был. Поэтому итератор после вставки указывает уже на 2ой элемент.
Никакие итераторы не меняют свое значение(указатель), когда что-то в контейнере меняется. Поэтому и существуют "правила инвалидации итераторов" (см. гугл). Главное что запомни - итераторы ничего не знают о контейнере, который их выдал. В случае с деком тебе повезло, а вообще при вставке push_front в вектор все итераторы считаются более не валидными.
Yandex
Объявления
17.09.2012, 23:36     insert работает как-то странно
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru