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

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

Войти
Регистрация
Восстановить пароль
 
mat_for_c
140 / 135 / 29
Регистрация: 26.04.2013
Сообщений: 650
Завершенные тесты: 2
#1

std::move() - C++

23.02.2014, 22:25. Просмотров 943. Ответов 8
Метки нет (Все метки)

Есть ли разница между следующими вещами:

C++
1
2
3
4
A = std::move(B);
// and
std::copy(B.begin(), B.end(), A.begin());
B.clear();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 22:25     std::move()
Посмотрите здесь:

Std::move - C++
Добрый вечер, #include <iostream> using namespace std; class A { private: int x = 10; public: A(int q){ x = q; }

Optional и std::move - C++
добрый день. разбираясь в исходниках optional'а из gcc, я понял, что там нигде не делается инвалидным только что перемещенный объект. ...

Error: 'move' is not a member of 'std' - C++
Как бороться с этой гогой?

Немного не понимаю std::move - C++
Здравствуйте, я немного не понимаю работу кода на 150-155 строках здесь: #include <iostream> #include <memory> #include...

Std::move stl-алгоритм - C++
здравствуйте, есть такой код: std::string his = "what the work ?"; std::istringstream isg(his); ...

std::move, rvalue reference - C++
Здравствуйте! Недавно начал разбираться с новыми способами передачи аргументов. Прочитал около 10 статей, некоторые на русском, некоторые...

Func(std::move(.) копирует ? - C++
Здравствуйте, имеется следующий код: void foo(std::vector<int>&& v) { std::cout << "vector is taken" << std::endl; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.02.2014, 22:36     std::move() #2
Если A и B это std::vector разного размера, то разница точно есть.
mat_for_c
140 / 135 / 29
Регистрация: 26.04.2013
Сообщений: 650
Завершенные тесты: 2
23.02.2014, 22:42  [ТС]     std::move() #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Если A и B это std::vector разного размера, то разница точно есть.
A можно по подробнее?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.02.2014, 22:45     std::move() #4
Цитата Сообщение от mat_for_c Посмотреть сообщение
A можно по подробнее?
std::copy() не расширяет размер приемника. Нужно указывать например std::back_inserter() в качестве третьего параметра.
mat_for_c
140 / 135 / 29
Регистрация: 26.04.2013
Сообщений: 650
Завершенные тесты: 2
23.02.2014, 22:52  [ТС]     std::move() #5
Цитата Сообщение от Tulosba Посмотреть сообщение
std::back_inserter() в качестве третьего параметра
согласен...
так все же, перемещение оно задействует копирование или нет?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.02.2014, 22:59     std::move() #6
mat_for_c, с точки зрения результата - кол-во элементов и их значения, разницы не будет (при оговоренном ранее условии). С точки зрения эффективности - лучше перемещение.
mat_for_c
140 / 135 / 29
Регистрация: 26.04.2013
Сообщений: 650
Завершенные тесты: 2
23.02.2014, 23:04  [ТС]     std::move() #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// move example
#include <utility>      // std::move
#include <iostream>     // std::cout
#include <vector>       // std::vector
#include <string>       // std::string
 
int main () {
  std::string foo = "foo-string";
  std::string bar = "bar-string";
  std::vector<std::string> myvector;
 
  myvector.push_back (foo);                    // copies
  myvector.push_back (std::move(bar));         // moves
 
  std::cout << "myvector contains:";
  for (std::string& x:myvector) std::cout << ' ' << x;
  std::cout << '\n';
 
  return 0;
}
вот тут в 16 строчке x получается что-то наподобие итератора, который сам определил диапазон?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.02.2014, 23:09     std::move() #8
Цитата Сообщение от mat_for_c Посмотреть сообщение
вот тут в 16 строчке x получается что-то наподобие итератора, который сам определил диапазон?
x последовательно принимает значения от std::begin(myvector) до std::end(myvector). См. диапазонный (range) for.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2014, 23:25     std::move()
Еще ссылки по теме:

Не срабатывает move конструктор std::unique_ptr - C++
Всем привет! Битый час не пойму почему в списке захвата компилятор ругается на удаленный копирующий конструктор unique_ptr, если я его...

Vector::swap и std::move - что эффективнее? - C++
Пусть имеется пустой вектор A и заполненный некими данными вектор B. Тогда какой из методов более эффективный: A.swap(B); A =...

Что происходит когда std::move применяется для int? - C++
Мне, вроде бы, понятно как работает std::move() на классах типа string. Но мне непонятно что будет в данном случаи. #include &lt;iostream&gt; ...

Std::mutex и std::recursive_mutex - C++
Есть некий класс: class A { public bool some_method(); private: std::mutex mutex_;

move семантика - C++
Сейчас стало появляться нечто вроде такого: class X { public: X (const X&amp; lvalue); // copy constructor X (X&amp;&amp; rvalue);...


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

Или воспользуйтесь поиском по форуму:
grindaah
20 / 20 / 0
Регистрация: 25.05.2011
Сообщений: 62
23.02.2014, 23:25     std::move() #9
move почти наверняка не задействует копирование.

Разница в приведенном коде может быть только для многопоточного приложения, т.к. для move
Data races
The objects in both ranges are modified.

а для copy:
Data races
The objects in the range [first,last) are accessed (each object is accessed exactly once).
The objects in the range between result and the returned value are modified (each object is modified exactly once).
Yandex
Объявления
23.02.2014, 23:25     std::move()
Ответ Создать тему
Опции темы

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