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

Интересная особенность в работе вектора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти количество нулей в конце записи факториала числа http://www.cyberforum.ru/cpp-beginners/thread1576518.html
Найти количество нулей в конце записи факториала числа n. Подскажет, кто алгоритм? Или хотя бы в какую сторону копать? Если приведете пример кода, буду безмерно благодарен!
C++ Быстрый перебор восьмизначных чисел на С++ Доброго всем вечера, можете подсказать как с этим разобраться? Неободимо перебрать все числа от 1 до 12345678 и проверить что в каждом из них встречается по 1 разу каждая цифра http://www.cyberforum.ru/cpp-beginners/thread1576511.html
C++ Namespace и static-функция
1. Может ли определение static-функции быть вне-класса? Выдает ошибку, просит перенести в тело 2.Как в файле класса cpp, куда я скидываю определение функий, определить пространство имен или что то типо того, чтоб каждый раз не писать class1:: ?
C++ Заполнить базу даных
Привет ребята, нужно заполнить базу данных информацыею про товар. Хочу через стринг. Мне получаеться нужно брать динамечиский масив и стринг?
C++ Разработать алгоритм определения координат опор линий С++ http://www.cyberforum.ru/cpp-beginners/thread1576470.html
задание! Разработать алгоритм определения координат опор линий!
C++ Dev C++ не компилирует Написал простейший "Hello World" в dev c++, нажимаю "Скомпилировать" (Ctrl+F9) вылетает окошко буквально на пару секунд, потом нажимаю "Отладка", пишет типа: "Проект не откомпилирован" что за ерунда? http://www.cyberforum.ru/attachment.php?attachmentid=599112&stc=1&d=1447099095 подробнее

Показать сообщение отдельно
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.11.2015, 12:05     Интересная особенность в работе вектора
Цитата Сообщение от pproger Посмотреть сообщение
он модифицирует удаленные элементы. а не просто копирует.
С remove_copy_if я, конечно, погорячился. Однако элементы он не модифицирует:
Copies the elements in the range [first,last) to the range beginning at result, except those elements for which pred returns true.
Для условного переноса элементов из одного контейнера в другой нужно что-то такого вида:
C++
1
2
3
4
5
std::vector<int> v;
// ...
auto it = std::stable_partition(v.begin(), v.end(), pick_the_good_elements);
std::vector<int> w(std::make_move_iter(it), std::make_move_iter(v.end()));
v.erase(it, v.end());
Отсюда. Там же есть и другое решение.
Цитата Сообщение от pproger Посмотреть сообщение
есть мнение, что это implementation defined
Ошибочное мнение. 23.3.6.5/3:
Invalidates iterators and references at or after the point of the erase.
Т.о. до точки удаления итераторы и ссылки не портятся. Стало быть перевыделения быть не может.

Добавлено через 1 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
бороться с тем, что итераторы становятся невалидными?
Не допускать соответствующих действий.
Насчет инвалидации много полезного тут.
 
Текущее время: 14:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru