|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.06.2013, 14:34 | #1 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Копирование интервала std::vector
Нужно скопировать часть элементов из одного вектора в другой. Например, все элементы со значением 2. Подскажите, что делаю неправильно:
Код:
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
13.06.2013, 14:42 | #2 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Получилось скопировать вот так:
Код:
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
13.06.2013, 22:15 | #3 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
А почему не воспользоваться предикатом:
bool IsTwo(int val) { return val == 2; } а затем ичпользовать copy_if-алгоритм? |
13.06.2013, 23:38 | #4 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
sVasilich
Нужно скопировать часть элементов из одного вектора в другой. Например, все элементы со значением 2. Подскажите, что делаю неправильно: чё-та у тебя как-то сложно... std::vector<int> vector1; ... std::vector<int> vector2(std::count(vector1.begin(), vector1.end(), 2), 2);
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
14.06.2013, 10:13 | #5 | |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Rififi
Код:
Igor95 Почему-то компилятор выдал ошибку Цитата:
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
|
14.06.2013, 10:34 | #6 | |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 639
|
Цитата:
ICQ: 677936656 Gmail: ekEmbed@gmail.com
|
|
14.06.2013, 10:48 | #7 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Ezhik Kihze, ну да.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
14.06.2013, 11:17 | #8 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
sVasilich
ошибка: 'copy_if' is not a member of 'std' функция copy_if изначально появилась в стандарте c++0x (теперь c++11) для gcc попробуй ключ -std=... или возьми более новую версию В реальной программе используется класс и выборка делается только по одному из его членов. struct Foo { int a, b; }; // код для c++11 std::vector<Foo> v1, v2; std::copy_if(v1.begin(), v1.begin(), std::back_inserter(v2), [](const Foo& f) { return f.a == 2; }); для обычного c++ можно заюзать remove_copy_if и предикат (хотя особого смысла не имеет, пора уже переходить на c++11) Код:
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
14.06.2013, 14:23 | #9 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 224
|
Rififi, спасибо за пояснение!
И всё таки, что с std::copy в первом моём сообщении не так? Интересно именно в этом варианте ошибку понять.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
|
20.06.2013, 11:05 | #10 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
vector2.reserve(distance) не эквивалентно vector2.resize(distance, 0 /*какойто def_val*/).
Откуда и copy не срабатывает, раз элемента с таким индексом не объявлено (хотя память и зарезервирована для использования). Последний раз редактировалось Smogg; 20.06.2013 в 11:09. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Boost - vector<path> to vector<string> | frommars | Общие вопросы C/C++ | 0 | 04.02.2013 21:19 |
std::vector и его инициализация | coNsept | Общие вопросы C/C++ | 5 | 15.06.2012 13:40 |
Вопрос по std::vector | Сtrl | Общие вопросы C/C++ | 8 | 21.10.2011 02:16 |
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> | Critter | Общие вопросы C/C++ | 5 | 08.08.2010 23:38 |
std::vector | ciaonataha | Общие вопросы C/C++ | 1 | 10.05.2009 15:50 |