Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
#1

Перемещение и удаление элементов в векторе - C++

21.09.2013, 16:19. Просмотров 1213. Ответов 10
Метки нет (Все метки)

Eсть такой код:
C++
1
2
3
4
5
6
7
8
9
vector<int> v = {-3, -5, -6, 1, 2, 3};
for (size_t i = 0; i != v.size(); i++)
{
    if (v[i] > 0)
    {
        v.insert(v.begin(), v[i]);
        v.erase(v.begin + i + 1);
    }
}
Как переделать его на работу с итераторами? Пробую так, но не получается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    
vector<int> v = {-3, -5, -6, 1, 2, 
int c = 0;
for (auto i = v.begin(); i != v.end(); i++) 
{
    if ((*i) > 0)
    {
        v.insert(v.begin(), (*i));
        ++c;
    }
}
v.resize(c);
Подскажите, в чем ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 16:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемещение и удаление элементов в векторе (C++):

Удаление повторяющихся элементов в векторе - C++
Нужно перегрузить унарный оператор ~ что бы он удалял повторяющиеся элементы в векторе vector&amp; operator ~ () { if (count &gt; 0) ...

Алгоритмы STL Удаление элементов в векторе - C++
Банальный вопрос. vector&lt;int&gt; В нем разные числа могут повторяться. Хочу удалить заданное значение, полностью исключить его из вектора. ...

Сравнение строк в векторе и удаление их повторений - C++
Ошибка компиляции в строках с erase(). Прога считывает n строк, сравнивает их все. Если строки одинаковые — он выводит ее и удаляет все...

Удаление содержимого указателей, хранящихся в векторе - C++
Здравствуйте! Меня озадачила одна проблема: допустим у нас есть вектор указателей, ссылающихся на класс А: vector&lt;A*&gt; va; Мы его...

Удаление одинаковых слов в векторе типа string - C++
Ай даже не буду ходить вокруг да около, просто скажу, что реализую задание (лично для себя интересно), частотного словаря (точного названия...

Сравнение элементов в векторе - C++
Подскажите как проверить на равенство поля объектов в векторе: Делаю так: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

10
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
21.09.2013, 16:37 #2
C++
1
2
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); ++it)
0
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
21.09.2013, 16:41  [ТС] #3
Цитата Сообщение от m1Rr0r Посмотреть сообщение
C++
1
2
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); ++it)
гм, а у меня разве i не итератор ?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2013, 16:44 #4
Цитата Сообщение от d1skort Посмотреть сообщение
Подскажите, в чем ошибка?
итераторы становятся невалидными после изменения коллекции
1
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
21.09.2013, 16:48 #5
C++
1
i = v.insert(v.begin(), (*i));
0
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
21.09.2013, 16:50  [ТС] #6
Цитата Сообщение от Jupiter Посмотреть сообщение
итераторы становятся невалидными после изменения коллекции

Не по теме:

Точно, глянул в справочник. Функция erase делает недействительными все итераторы, которые ссылаются на элементы, расположенные после только что удаленного элемента.



Получается с итераторами не получится сделать?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2013, 16:51 #7
Цитата Сообщение от d1skort Посмотреть сообщение
Получается с итераторами не получится сделать?
а что вы делаете?
0
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
21.09.2013, 16:53  [ТС] #8
Цитата Сообщение от m1Rr0r Посмотреть сообщение
C++
1
i = v.insert(v.begin(), (*i));
Не работает, может я что то не так сделал?

Цитата Сообщение от Jupiter Посмотреть сообщение
а что вы делаете?
Все положительные элементы вектора переместить в начало и удалить оставшиеся.
0
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
21.09.2013, 16:59 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int arr[] = {-3, -5, -6, 1, 2, 3};
    int c = 0;
    vector<int> v(sizeof(arr) / sizeof(int));
    memcpy(&v[0], arr, sizeof arr);
    for(auto i = v.begin(); i != v.end(); ++i)
    {
        if ((*i) <= 0)
        {
            //v.insert(v.begin(), (*i));
            i = v.erase(i);
            i++;
        }
    }
    cout << v.size() << endl;
Удалить отрицательные ?
1
d1skort
20 / 20 / 0
Регистрация: 10.02.2013
Сообщений: 75
21.09.2013, 17:06  [ТС] #10
Цитата Сообщение от m1Rr0r Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int arr[] = {-3, -5, -6, 1, 2, 3};
    int c = 0;
    vector<int> v(sizeof(arr) / sizeof(int));
    memcpy(&v[0], arr, sizeof arr);
    for(auto i = v.begin(); i != v.end(); ++i)
    {
        if ((*i) <= 0)
        {
            //v.insert(v.begin(), (*i));
            i = v.erase(i);
            i++;
        }
    }
    cout << v.size() << endl;
Удалить отрицательные ?
Хм, показывает 5.
Вообще смысл задания не просто удалить, а переместить все положительные элементы в начало, потом обрезать resize.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2013, 17:08 #11
Цитата Сообщение от d1skort Посмотреть сообщение
Все положительные элементы вектора переместить в начало и удалить оставшиеся.
удалить все отрицательные
C++
1
2
auto it = std::remove_if(v.begin(), v.end(), [](int i) { return i < 0;});
v.erase(it, v.end());
2
21.09.2013, 17:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 17:08
Привет! Вот еще темы с ответами:

Сортировка элементов в векторе - C++
Доброго времени суток! Подскажите пожалуйста куда копать: есть вектор Vector &lt;Map &lt;String, String&gt; &gt; v_costs_of_period, состоящий из...

Максимальное количество элементов в векторе - C++
Насколько длинный может быть std:vector? P.S. Под словом &quot;длинный&quot; я подразумеваю размер от 1000000 до 1000000000...

Поиск одинаковых элементов в векторе - C++
Здравствуйте , уже задавал этот вопрос и пользовался разными предложенными методами нахождения одинаковых чисел в векторе , но не...

Откуда столько элементов в векторе? - C++
struct SReBuMa // research buildings manufacture { int life; vector &lt;elemental_resource&gt; cost; int produced_limit; int...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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