Копирование вектора
От: Аноним  
Дата: 21.10.05 09:54
Оценка:
Как скопировать один вектор в другой?
Re: Копирование вектора
От: MaximE Великобритания  
Дата: 21.10.05 09:56
Оценка: :))
On Fri, 21 Oct 2005 13:54:45 +0400, Аноним <0@users.rsdn.ru> wrote:

> Как скопировать один вектор в другой?


Точно также как int.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 2.0 beta
Re[2]: Копирование вектора
От: ArtDenis Россия  
Дата: 21.10.05 09:59
Оценка:
Ну-ну... Ты сейчас насоветуешь. Неужели один вектор можно скопировать в другой вот так:


std::vector<Class> v1, v2;

....

memcpy(&v1, &v2, sizeof(std::vector<Class>));

?

Posted via RSDN NNTP Server 1.9
http://ufa-darts.ru/ — дартс-лига Уфы
Re[3]: Копирование вектора
От: MaximE Великобритания  
Дата: 21.10.05 10:02
Оценка: +1 :)
On Fri, 21 Oct 2005 13:59:22 +0400, ArtDenis <15178@users.rsdn.ru> wrote:

> Ну-ну... Ты сейчас насоветуешь. Неужели один вектор можно скопировать в другой вот так:

>
>
>
> std::vector<Class> v1, v2;
>
> ....
>
> memcpy(&v1, &v2, sizeof(std::vector<Class>));
>

> ?

Можно. Но за свою изобретательность тебе придется расплатиться.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 2.0 beta
Re[2]: Копирование вектора
От: Аноним  
Дата: 21.10.05 11:05
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>On Fri, 21 Oct 2005 13:54:45 +0400, Аноним <0@users.rsdn.ru> wrote:


>> Как скопировать один вектор в другой?


А если серьезно? Разве для вектора определен оператор присваивания? Трактуемое компилятором присваивание по умолчанию как побитовое копирование думаю не совсем то что нужно.
Re: Копирование вектора
От: Bell Россия  
Дата: 21.10.05 11:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как скопировать один вектор в другой?



#include <vector>
#include <algorithm>

using namespace std;

int main()
{
   vector<int> v1, v2;
   //1
   v1 = v2;
   //2
   v1.assign(v2.begin(), v2.end());

   //3
   v1.resize(v2.size());
   copy(v2.begin(), v2.end(), v1.begin());

   //4
   v1.clear();
   v1.insert(v1.begin(), v2.begin(), v2.end());

   //С помощью конструкторов
   //5
   vector<int> v3(v2);
   //6
   vector<int> v4(v2.begin(), v2.end());

   return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[3]: Копирование вектора
От: Lorenzo_LAMAS  
Дата: 21.10.05 11:08
Оценка:
А>А если серьезно? Разве для вектора определен оператор присваивания? Трактуемое компилятором присваивание по умолчанию как побитовое копирование думаю не совсем то что нужно.

А если серьезно, то для вектора перегружен оператор присваивания.
Of course, the code must be complete enough to compile and link.
Re[3]: Копирование вектора
От: Bell Россия  
Дата: 21.10.05 11:12
Оценка: +1 :)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, MaximE, Вы писали:


ME>>On Fri, 21 Oct 2005 13:54:45 +0400, Аноним <0@users.rsdn.ru> wrote:


>>> Как скопировать один вектор в другой?


А>А если серьезно? Разве для вектора определен оператор присваивания?

Определен.

А>Трактуемое компилятором присваивание по умолчанию как побитовое копирование думаю не совсем то что нужно.


Срочно выкинуть книгу, в которой говорится о побитовом копировании, как способе реализации оператора присваивания по умолчанию, и воспользоваться поиском по форуму для формирования правильного представления о природе этого оператора.
Любите книгу — источник знаний (с) М.Горький
Re[4]: Копирование вектора
От: Lorenzo_LAMAS  
Дата: 21.10.05 11:20
Оценка:
B>Срочно выкинуть книгу, в которой говорится о побитовом копировании, как способе реализации оператора присваивания по умолчанию,

А заодно скажи фамилию автора для занесения в скрижали позорища!
Of course, the code must be complete enough to compile and link.
Re[5]: Копирование вектора
От: Аноним  
Дата: 21.10.05 11:24
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

B>>Срочно выкинуть книгу, в которой говорится о побитовом копировании, как способе реализации оператора присваивания по умолчанию,


L_L>А заодно скажи фамилию автора для занесения в скрижали позорища!


Прошу прощения, похоже мои слова были неправильно истолкованы. Имелось в виду что если для класса не определен оператор =, то компилятор трактует присваивание как побитовое копирование.
Re[6]: Копирование вектора
От: CrystaX Россия https://www.crystax.net/
Дата: 21.10.05 11:30
Оценка: 1 (1) +1
Здравствуйте, <Аноним>, Вы писали:

А>Прошу прощения, похоже мои слова были неправильно истолкованы. Имелось в виду что если для класса не определен оператор =, то компилятор трактует присваивание как побитовое копирование.


Если для класса не определен оператор копирования, то компилятор трактует присваивание как почленное копирование, а вовсе не побитовое.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[6]: Копирование вектора
От: Bell Россия  
Дата: 21.10.05 11:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Прошу прощения, похоже мои слова были неправильно истолкованы. Имелось в виду что если для класса не определен оператор =, то компилятор трактует присваивание как побитовое копирование.


Слова истолкованы правильно. Не стОит защищать автора — побитовое копирование — это совсем не то, сто делает оператор присваивания по умолчанию (если быть абсолютно точным, то в ряде случаев оператор вполне может реализован как memcpy, но в общем случае это не так).
Чтобы не быть голословным:

12.8/13
The implicitly-defined copy assignment operator for class X 
performs memberwise assignment of its subobjects.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Копирование вектора
От: Николай Ганичев Россия  
Дата: 23.10.05 13:46
Оценка: -1 :)
Здравствуйте, Bell, Вы писали:

А>>Как скопировать один вектор в другой?


B>
B>#include <vector>
B>#include <algorithm>

B>using namespace std;

B>int main()
B>{
B>   vector<int> v1, v2;
B>   //1
B>   v1 = v2;
B>   //2
B>   v1.assign(v2.begin(), v2.end());

B>   //3
B>   v1.resize(v2.size());
B>   copy(v2.begin(), v2.end(), v1.begin());

B>   //4
B>   v1.clear();
B>   v1.insert(v1.begin(), v2.begin(), v2.end());

B>   //С помощью конструкторов
B>   //5
B>   vector<int> v3(v2);
B>   //6
B>   vector<int> v4(v2.begin(), v2.end());

B>   return 0;
B>}
B>


Это всё нужно написать только для того, чтобы скопировать вектор?! Синтаксический оверхед.
... << RSDN@Home 1.1.4 beta 7 rev. 463>>
Re[3]: Копирование вектора
От: Bell Россия  
Дата: 23.10.05 14:44
Оценка:
Здравствуйте, Николай Ганичев, Вы писали:

НГ>Это всё нужно написать только для того, чтобы скопировать вектор?! Синтаксический оверхед.


Это было 6 различных способов коприрования, если кто не понял...
Любите книгу — источник знаний (с) М.Горький
Re[3]: Копирование вектора
От: Аноним  
Дата: 24.10.05 07:32
Оценка:
AD>Ну-ну... Ты сейчас насоветуешь. Неужели один вектор можно скопировать в другой вот так:
AD>
AD>std::vector<Class> v1, v2;
AD>....
AD>memcpy(&v1, &v2, sizeof(std::vector<Class>));
AD>

AD>?
AD>

А ты один int копируешь в другой тоже так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.