223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
1

Переместить содержимое из set в vector

12.05.2018, 22:48. Показов 6034. Ответов 4
Метки нет (Все метки)

доброго времени суток. пытаюсь переместить данные из одного контейнера в другой. наткнулся на std::make_move_iterator(). решил потестить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class test {
   std::vector<size_t> field;
public:
   test(const std::vector<size_t>& field)
      : field(field) {}
 
   test(const test& other)
      : field(other.field)
   {
      std::cout << "test(const test& other)\n";
   }
 
   test(test&& other) noexcept
      : field(std::move(other.field))
   {
      std::cout << "test(test&& other)\n";
   }
 
   test& operator=(const test& other)
   {
      std::cout << "operator=(const test& other)\n";
 
      if (this == &other)
         return *this;
      field = other.field;
      return *this;
   }
 
   test& operator=(test&& other) noexcept
   {
      std::cout << "operator=(test&& other)\n";
 
      if (this == &other)
         return *this;
      field = std::move(other.field);
      return *this;
   }
 
   friend bool operator<(const test& lhs,
      const test& rhs) { return lhs.field < rhs.field; }
};
 
int main()
{
   std::set<test> s;
 
   s.insert(std::vector<size_t>() = { 1, 1 });
   s.insert(std::vector<size_t>() = { 1, 2 });
 
   std::cout << "\ntry move:\n";
   std::vector<test> v(std::make_move_iterator(s.begin()), std::make_move_iterator(s.end()));
}
Вывод:
test(test&& other)
test(test&& other)

try move:
test(const test& other)
test(const test& other)

так почему все же используется копирующий конструктор при попытке переместить содержимое?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2018, 22:48
Ответы с готовыми решениями:

Vector<set<string>>
это кусок программы где я из массива string переписываю слова в вектор элементами которого являются...

Чем отличается vector<> от set<> а?
Привет всем, у меня токой вопрос, Чем отличается vector&lt;&gt; от set&lt;&gt; а? обое же контеинеры?...

set<vector<int> >, вывод елементов
Возможно глупый вопрос, но я как-то завис на этом. Как правильно вывести элементы из...

Std::set( vector ) и расход памяти
Здравствуйте! Пытаюсь разобраться сколько памяти съедают контейнеры и никак не могу понять...

4
7350 / 6275 / 2853
Регистрация: 14.04.2014
Сообщений: 27,200
12.05.2018, 23:20 2
Лучший ответ Сообщение было отмечено mat_for_c как решение

Решение

Может, потому что элементы множества нельзя изменять.
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
12.05.2018, 23:30  [ТС] 3
и в правду, при перемещении идет изменение объекта, я как-то не подумал об этом.
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
15.05.2018, 09:52  [ТС] 4
Правильно ли я понимаю, что для моего случая эффективнее использовать shared_ptr<test> как для std::set, так и std::vecor?
По логике вещей, копировать указатели быстрее, нежели сами объекты
0
Форумчанин
Эксперт CЭксперт С++
8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
15.05.2018, 15:07 5
mat_for_c, работа с дин. памятью медленнее работы с объектами на стеке.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2018, 15:07
Помогаю со студенческими работами здесь

Максимальный размер массива, vector, set, map
Как можно узнать максимальный размер массива, vector, set, map, стеков, очередей. Это зависит от...

На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set,
На базе контейнера vector из стандартной библиотеки С++ создайте шаблон класса Set, в котором...

Как очистить содержимое множества set?
после добавления множества в вектор нужно очистить множество для повторной записи туда set&lt;string&gt;...

Как переместить содержимое текстового документа в string?
Помогите пожалуйста. текстовый документ формата .txt , извлечь для редактирования в String, и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru