9 / 9 / 8
Регистрация: 08.11.2014
Сообщений: 215
Записей в блоге: 1
1

Из одного вектора в другой

11.02.2017, 18:02. Показов 4425. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть у меня вектор уникальных указателей
C++
1
std::vector<std::unique_ptr<Polygon>> ObjList;
Так же имеется класс, в котором тоже можно найти вектор умных указателей
C++
1
std::vector<std::unique_ptr<Polygon>> FromMapObj;
В этом же классе есть геттер этого вектора
C++
1
2
3
4
std::vector<std::unique_ptr<Polygon>>const& MapIO::getVectorObj() const
{   
    return FromMapObj;
}
Ну а теперь сама проблема: мне нужно заменить данные вектора ObjList на данные вектора FromMapObj
Делаю я это таким образом:
C++
1
2
3
4
5
ObjList.clear();
for (auto &p : mio->getVectorObj())
{
    ObjList.push_back(std::move(p));
}
Ну и, собственно, ругается компилятор на мой цикл
Говорит, предпринята попытка ссылки на удаленную функцию
Так что же нужно сделать, дабы избежать этой ошибки?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2017, 18:02
Ответы с готовыми решениями:

Перенести элементы из одного вектора в другой
std:: vector&lt; std::tuple&lt;int, int,int&gt; &gt; passengers; // Все пассажиры: ID, отправление, назначение...

Перенести элементы одного вектора в другой
Друзья, такая задача, нужна программа, которая разбивала бы слово, которое вводится с клавиатуры на...

Скопировать часть одного вектора в другой, в обратном порядке
как скопировать часть одного вектора в другой, при этом отсчет с конца V1 = 1,2,3,4,5 v2...

Вставка одного вектора в другой через один без циклов
Поставили интересную задачу: вставить элементы одного вектора в другой без использования циклов....

8
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
11.02.2017, 18:09 2
Цитата Сообщение от avraal Посмотреть сообщение
В этом же классе есть геттер этого вектора
Геттер константный, а у вас перемещается оттуда что-то, вот и пытается копировать, а этого не дано юник-поинтеру.
1
873 / 460 / 90
Регистрация: 10.06.2014
Сообщений: 2,666
11.02.2017, 18:10 3
Насколько я понял, дело в move который приводит к unspecified state перемещаемых объектов

http://en.cppreference.com/w/c... ector/swap
Чем не подходит?
1
9 / 9 / 8
Регистрация: 08.11.2014
Сообщений: 215
Записей в блоге: 1
11.02.2017, 18:29  [ТС] 4
Цитата Сообщение от GbaLog- Посмотреть сообщение
Геттер константный
Исправил на следующее:
C++
1
2
3
4
std::vector<std::unique_ptr<Polygon>> MapIO::getVectorObj()
{   
    return FromMapObj;
}
Но ошибка всё та же, и, как я понял, это из-за того, что мой геттер больше не константный, ибо если вернуть обратно, ошибка будет возникать при моей попытке переписать данные вектора другими данными
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
11.02.2017, 18:30 5
Лучший ответ Сообщение было отмечено avraal как решение

Решение

Цитата Сообщение от avraal Посмотреть сообщение
Исправил на следующее
Сейчас вектор пытается копироваться при возврате из функции, возвращайте НЕ константную ссылку.
1
9 / 9 / 8
Регистрация: 08.11.2014
Сообщений: 215
Записей в блоге: 1
11.02.2017, 18:42  [ТС] 6
Цитата Сообщение от GbaLog- Посмотреть сообщение
возвращайте НЕ константную ссылку
C++
1
2
3
4
std::vector<std::unique_ptr<Polygon>> MapIO::getVectorObj()
{   
    return FromMapObj;
}
Уже не возвращаю. Или я чего-то не понимаю?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
11.02.2017, 19:28 7
Цитата Сообщение от GbaLog- Посмотреть сообщение
возвращайте
Цитата Сообщение от avraal Посмотреть сообщение
Уже не возвращаю.
Это не математика, тут от перемены мест "слагаемых" "сумма" ой как меняется...
И "возвращайте не..." не одно и то же, что и "не возвращайте...". Сейчас вы вообще не ссылку возвращаете, а я сказал, что надо возвращать ссылку!!! НЕ константную ссылку!!!

Не по теме:

Как же порой трудно "учить" людей, а не тупо делать за них. :wall:

1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
11.02.2017, 19:38 8
C++
1
2
3
4
std::vector<std::unique_ptr<Polygon>>& MapIO::getVectorObj()
{   
    return FromMapObj;
}
1
873 / 460 / 90
Регистрация: 10.06.2014
Сообщений: 2,666
12.02.2017, 16:15 9
Лучший ответ Сообщение было отмечено avraal как решение

Решение

Цитата Сообщение от avraal Посмотреть сообщение
мне нужно заменить данные вектора ObjList на данные вектора FromMapObj
В прежнем посту по помоему не то написал...По коду вижу что бы вы хотите просто переместить данные из одного вектора с unique_ptr в другой. Можно так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <iterator>
#include <memory>
 
struct Foo
{
    int *n;
    Foo(int num)
    {
        n = new int(num);
    }
};
 
int main()
{
    std::vector<std::unique_ptr<Foo>> v1;
    v1.emplace_back(new Foo(100));
    
    std::vector<std::unique_ptr<Foo>> v2(std::make_move_iterator(v1.begin()), std::make_move_iterator(v1.end()));
    std::cout << *(v2[0]->n);
}
http://rextester.com/DKJ43299

Добавлено через 8 минут
В случае со swap как я предложил выше произойдет обмен данными между двумя векторами
А этот вариант не предполагает обмен, а лишь однонаправленное перемещение
1
12.02.2017, 16:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2017, 16:15
Помогаю со студенческими работами здесь

Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор
Все элементы вектора V,которые встречаються более одного раза ,переписать в другой вектор. Задача...

Из одного вектора получить другой
Нужна помочь братаны...Из заданного векора А(3N) получить вектор В(N), очередная компонента котороо...

Из одного вектора получить другой
Составить программу для формирования вектора Х(х1,х2,...,хn),где х1 совпадает с первой ненулеой...

Из одного вектора получить другой по правилу
Помогите пожалуйста решить!!!! Из заданного вектора A(3N) получите вектор B(N), очередная...


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

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

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