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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
#1

Склеивание двух vector'ов - C++

03.10.2010, 13:52. Просмотров 1557. Ответов 11
Метки нет (Все метки)

Имеется два экземпляра класса std::vector. Я хочу один вектор прицепить к другому. Т..е на входе имеем вектора {1,2,3} и {4,5,6}, а хочется получить вектор {1,2,3,4,5,6}. Сейчас я обхожу поэлементно второй вектор и добавляю к первому, но это велосипед. Можно ли это сделать по-человечески?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2010, 13:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Склеивание двух vector'ов (C++):

Склеивание двух массивов - C++
#include <stdafx.h> #include <iostream> #include <stdio.h> #include <ctime> #include <windows.h> #include <iomanip> #include...

Склеивание двух двумерных массивов - C++
Всем привет, нужна помощь, не могу понять как сделать склеивание двух двумерных массивов. Кто нибудь пожалуйста помогите это реализовать)) ...

Склеивание строк - C++
Здравствуйте, помогите, пожалуйста, уже многое перепробовал, но вылетает одна и та же ошибка - необработанное исключение; многими...

Склеивание трех и более массивов - C++
Вопрос заключается в следующем: Есть 4 разных одномерных массива char * Name1 = {"Имя1", "Имя2," "Имя3", "Имя4", "Имя5",};...

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

"Склеивание" 2-х байт - C++
Доброго времени суток! В свободное время изучаю C++. В качестве IDE выступает Visual C++ 2010 Express. Столкнулся с одной трудностью. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
03.10.2010, 13:57 #2
http://cppreference.com/wiki/stl/vector/insert
Третий вариант insert'а не подойдет?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 13:58 #3
Evg, используй метод insert.
C++
1
v2.insert(v2.end(), v1.begin(), v1.end());
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
03.10.2010, 15:35  [ТС] #4
Помогло.

Ну и традиционный высер в сторону тех, кто это придумал. Почему нельзя было сделать метод append? Просто при наличии такого метода можно было бы записывать конструкции типа "vec.append (func())" (т.е. результат вызова функции). А в таком варианте приходится заводить дополнительную переменную.

Вопрос касается того, что отсутствие подобного метода - это что-то из разряда того, что типа можно эту функциональность выполнить существующими средствами (insert) или потому что получится менее эффективная реализация?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 15:52 #5
Цитата Сообщение от Evg Посмотреть сообщение
Почему нельзя было сделать метод append?
Видимо, потому что его можно легко реализовать самостоятельно в виде свободной функции. Т.е. как раз таки:
Цитата Сообщение от Evg Посмотреть сообщение
эту функциональность выполнить существующими средствами (insert)
Стандартная же библиотека представляет лишь минимально необходимый набор методов.
Кроме того, ты наверняка заметил, что, не считая конструктора и метода swap (который был добавлен лишь из соображений эффективности), ни один из методов не принимает вектор - все работают с итераторами, т.е. все крутиться вокруг них. Благодаря этому ты можешь заставить вектор работать и со списками и обычными массива и т.п.
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
03.10.2010, 16:03  [ТС] #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Стандартная же библиотека представляет лишь минимально необходимый набор методов.
Мне не раз казалось, что это не есть так. Например метод empty по сути избыточный, потому как есть метод size.

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
... все работают с итераторами, т.е. все крутиться вокруг них.
Я не так часто и не так глубоко работал со всем этим хозяйством, чтобы "ощущать" это. Возможно, что корень проблемы именно в этом. Со временем может пойму
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 16:16 #7
Цитата Сообщение от Evg Посмотреть сообщение
Например метод empty по сути избыточный, потому как есть метод size.
Формально говоря, тип результата метода size, а именно size_type, зависит от типа контейнера (size_type обявлен внутри контейнера через typedef), emty же всегда возвращает bool. Кроме того класс std::string, которого можно назвать специализированным контейнером, не имеет метода size. Видимо для единообразности проверки пустоты контейнера и был введен метод empty.
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
03.10.2010, 16:35  [ТС] #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
единообразности
Ещё один момент, который я не учёл, когда думал о append. С другой стороны единообразие хорошо, но так или иначе пользователь работает с частностями.
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
03.10.2010, 17:35 #9
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
класс std::string... не имеет метода size.
В стандарте имеет.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 18:21 #10
Цитата Сообщение от Mr.X Посмотреть сообщение
В стандарте имеет.
Точно. Спасибо.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.10.2010, 18:26 #11
Цитата Сообщение от Evg Посмотреть сообщение
но так или иначе пользователь работает с частностями.
пользователь может поменять vector на deque, потом решит хранить в list, потом задумает свой контейнер написать - при этом запись будет все также работать
Evg
Эксперт CАвтор FAQ
17620 / 5844 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
03.10.2010, 18:46  [ТС] #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
пользователь может поменять vector на deque, потом решит хранить в list, потом задумает свой контейнер написать - при этом запись будет все также работать
Про частности я писал в том ключе, что, например, действие append имеет смысл для списков (связать два списка), но не имеет смысла (логического) для стека или дэка. Исходя из этих соображений не правильно добавлять в контейнер метод append, потому что это нарушит единообразие. Но для меня, как для программиста, было бы удобно наличие метода append, чтобы мне не пришлось его писать ручками. Я знаю, что я буду пользоваться вектором (массивом), а потому заранее знаю, что не буду переделывать ни в список, ни в стек
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2010, 18:46
Привет! Вот еще темы с ответами:

Слияние двух файлов по алгоритму: цифра вставляется после двух символов - C++
#include <iostream> #include <io.h> #include <stdio.h> #include <windows.h> #include <string.h> #include <conio.h> using...

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

Найти произведение двух наибольших и двух наименьших отрицательных нечетных чисел массива - C++
Найти произведение двух наибольших и двух наименьших отрицательных нечетных чисел массива Дана последовательность из n различных целых...

Работа с битами, вывести на экран все комбинации двух единиц и двух нулей - C++
Здравствуйте, не могу решить такую задачу: К примеру есть 4 бита: 1010. Нужно функция которая выведет на экран все комбинации двух единиц...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.10.2010, 18:46
Ответ Создать тему
Опции темы

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