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

Можно ли значение вектора A передать вектору B через swap? - C++

Восстановить пароль Регистрация
 
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
11.11.2013, 19:26     Можно ли значение вектора A передать вектору B через swap? #1
А возможно ли такое сделать через swap:
значение вектора A передать вектору B, при этом у вектора A должно остаться свое значение.

Я понимаю, что можно написать B=A, но вот вектора довольно-таки большие и присваивание долго идет.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Angeline
36 / 30 / 2
Регистрация: 21.10.2013
Сообщений: 197
11.11.2013, 19:29     Можно ли значение вектора A передать вектору B через swap? #2
mat_for_c, ну свапом будет еще дольше ведь.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
11.11.2013, 20:17  [ТС]     Можно ли значение вектора A передать вектору B через swap? #3
Почему??? Обменять значения векторов через метод swap самого контейнера есть константа!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.11.2013, 20:34     Можно ли значение вектора A передать вектору B через swap? #4
Цитата Сообщение от mat_for_c Посмотреть сообщение
Я понимаю, что можно написать B=A, но вот вектора довольно-таки большие и присваивание долго идет.
А ты хочешь, что бы они ссылались на одни и те же данные? С вектром так не пойдёт.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.11.2013, 21:00     Можно ли значение вектора A передать вектору B через swap? #5
Цитата Сообщение от gray_fox Посмотреть сообщение
С вектром так не пойдёт.
Зато пойдет с каким-нибудь QVector, с implicit sharing на борту.
mat_for_c, предлагаю ознакомиться с концепциями: подсчет ссылок (аля shared_ptr) и copy-on-write.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 586
Завершенные тесты: 2
11.11.2013, 21:13  [ТС]     Можно ли значение вектора A передать вектору B через swap? #6
Цитата Сообщение от Tulosba Посмотреть сообщение
QVector
то бишь он в Qt. Tulosba, где-то слышал, что если дело касается скорости выполнения, то Qt лучше не использовать... или наврали?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
11.11.2013, 21:21     Можно ли значение вектора A передать вектору B через swap? #7
mat_for_c, скорее всего наврали. Но надо проверять конкретный код.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
12.11.2013, 08:03     Можно ли значение вектора A передать вектору B через swap? #8
Цитата Сообщение от mat_for_c Посмотреть сообщение
где-то слышал, что если дело касается скорости выполнения, то Qt лучше не использовать... или наврали?
Там полиморфные коллекции (в отличие от STL), так что могут быть (скорее всего, я думаю) медленнее. Но насколько, 25%? 50%? Это критично?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.11.2013, 08:22     Можно ли значение вектора A передать вектору B через swap? #9
Цитата Сообщение от gray_fox Посмотреть сообщение
Там полиморфные коллекции (в отличие от STL)
Что Вы имеете в виду?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
12.11.2013, 08:55     Можно ли значение вектора A передать вектору B через swap? #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Что Вы имеете в виду?
Наследование, виртуальные методы, там нет этого?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.11.2013, 09:02     Можно ли значение вектора A передать вектору B через swap? #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Наследование, виртуальные методы, там нет этого?
Смотрите сами http://qt-project.org/doc/qt-5.0/qtcore/qvector.html
Шаблонный класс, как в STL.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
12.11.2013, 09:58     Можно ли значение вектора A передать вектору B через swap? #12
В новом стандарте для таких случаев есть перенос с помощью rvalue reference

Добавлено через 5 минут
C++
// википедия
template< class T > class vector
{
   vector (const vector& ) ; // Конструктор копирования (медленный)
   vector (vector&&) ; // Конструктор переноса из временного объекта (быстрый)
   vector & operator = ( const vector& ) ; // Обычное присваивание (медленное)
   vector & operator = ( vector&&) ; // Перенос временного объекта (быстрый)
} ;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.11.2013, 11:57     Можно ли значение вектора A передать вектору B через swap? #13
programina, см. тз
Цитата Сообщение от mat_for_c Посмотреть сообщение
значение вектора A передать вектору B, при этом у вектора A должно остаться свое значение.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
12.11.2013, 12:41     Можно ли значение вектора A передать вектору B через swap? #14
Цитата Сообщение от Tulosba Посмотреть сообщение
programina, см. тз
что не правильно?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.11.2013, 12:43     Можно ли значение вектора A передать вектору B через swap? #15
programina,
Цитата Сообщение от mat_for_c Посмотреть сообщение
у вектора A должно остаться свое значение
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.11.2013, 13:31     Можно ли значение вектора A передать вектору B через swap? #16
programina, move переместит данные из одного вектора в другой. В старом векторе данных не останется.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
12.11.2013, 14:54     Можно ли значение вектора A передать вектору B через swap? #17
Вот так
C++
#include <vector>
#include <iostream>
using namespace std;
 
struct C {
  vector <int> s;
 
  C(vector <int> d)
  {
    s = d;
  }
 
  C(C && c)
  {
     s = c.s;
  }
} ;
 
 
int main ()
{
  vector <int> g;
  g.push_back(1);
  g.push_back(2);
 
  C a = C(g) ;
  C b = move(a); 
 
  cout << b.s[0] << endl;
  cout << b.s[1] << endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2013, 15:04     Можно ли значение вектора A передать вектору B через swap?
Еще ссылки по теме:

Освободить память вектора векторов без swap C++
C++ Чем можно заменить функцию swap?
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.11.2013, 15:04     Можно ли значение вектора A передать вектору B через swap? #18
programina, Это копия. Смысл тут в move конструкторе?
А вот пример перемещения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
 
struct A
{
   A(std::vector<int> v) : v_(v) {}
   A(A&& rhs) : v_(std::move(rhs.v_)) {}
 
   std::vector<int> v_;
};
 
int main()
{
   A a{{}};
   a.v_ = {1,2,3};
   std::cout << a.v_.size() << std::endl;
   A b(std::move(a));
   std::cout << a.v_.size() << " " << b.v_.size() << std::endl;
}
http://ideone.com/xC0NH7
Yandex
Объявления
12.11.2013, 15:04     Можно ли значение вектора A передать вектору B через swap?
Ответ Создать тему
Опции темы

Текущее время: 18:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru