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

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

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

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

03.10.2010, 13:52. Просмотров 1537. Ответов 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++
#include <stdafx.h> #include <iostream> #include <stdio.h> #include <ctime> #include <windows.h> #include <iomanip> #include...

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

Сравнение двух списков, на основе vector <string> - C++
# include &lt;iostream&gt; # include &lt;string&gt; # include &lt;fstream&gt; # include &lt;vector&gt; # include &lt;iterator&gt; # include &lt;algorithm&gt; ...

Массив типа "Vector" (Вывести номера двух крупнейших элементов в этом массиве. Вычислить их сумму) - C++
Образовать и вывести массив &quot;y&quot; типа Vector с элементами yk = f (k) k = 1.12 е = 2.71 Вывести номера двух крупнейших элементов в этом...

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

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

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

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

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

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

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

Bind vector<vector<A*>> - C++
Привет всем ! вот код struct A { void qwer(int a) { qDebug()&lt;&lt;a; } }; int main(int argc, char...

vector<vector <bool> > - C++
vector&lt;vector &lt;bool&gt; &gt; v1; bool v2 = { {1,1}, {1,1}, }; как v1 присвоить v2? Добавлено через 1 минуту в c++11...

Поиск в vector < vector <T> > - C++
есть двумерный массив vector &lt; vector &lt;double&gt; &gt; a(size, vector&lt;double&gt;(size, 0)); заполняем рандомом, надо найти индекс последнего...

vector<vector<double>> => 2 * vector<vector<double>> - C++
Здравствуйте. У меня следующий вопрос. Имеется двумерный массив, созданный через класс vector&lt;vector&lt;double&gt;&gt; и пусть последний столбец...

vector < vector < pair<int,int> > > g - C++
Подскажите как мне считать файл *.txt- 2 7 3 9 6 14 1 7 4 15 3 10 .................. где числа идут парами( (2,7),(3,9),(6,14) ) в...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,672
Записей в блоге: 26
03.10.2010, 18:46  [ТС]     Склеивание двух vector'ов #12
Цитата Сообщение от alex_x_x Посмотреть сообщение
пользователь может поменять vector на deque, потом решит хранить в list, потом задумает свой контейнер написать - при этом запись будет все также работать
Про частности я писал в том ключе, что, например, действие append имеет смысл для списков (связать два списка), но не имеет смысла (логического) для стека или дэка. Исходя из этих соображений не правильно добавлять в контейнер метод append, потому что это нарушит единообразие. Но для меня, как для программиста, было бы удобно наличие метода append, чтобы мне не пришлось его писать ручками. Я знаю, что я буду пользоваться вектором (массивом), а потому заранее знаю, что не буду переделывать ни в список, ни в стек
Yandex
Объявления
03.10.2010, 18:46     Склеивание двух vector'ов
Ответ Создать тему
Опции темы

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