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

Можно ли удалить объект std::vector, а данные оставить? - C++

Восстановить пароль Регистрация
 
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
08.08.2013, 10:02     Можно ли удалить объект std::vector, а данные оставить? #1
C++
1
2
3
4
5
6
void fun(double *p)
{
   std::vector<double> myvector (5);
   p=myvector.data();
   return;
}
После выполнения p указывает на освобожденную память. Делать копию не хочется. Можно ли сохранить данные из вектора?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.08.2013, 10:05     Можно ли удалить объект std::vector, а данные оставить? #2
Скорее всего static std::vector<double> myvector(5); - должно сработать. Вот только как потом память из под него отчистить - без понятия
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.08.2013, 10:08     Можно ли удалить объект std::vector, а данные оставить? #3
Указатель p в вызывающем коде все равно не изменится.

Если функция должна создать вектор, то пусть и возвращает его
C++
1
std::vector<double> foo();
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.08.2013, 10:18     Можно ли удалить объект std::vector, а данные оставить? #4
loou, аа, принимай параметр в виде double &*p или double *&p - точно не помню, которое. Компилятор подскажет
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
08.08.2013, 10:18  [ТС]     Можно ли удалить объект std::vector, а данные оставить? #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Указатель p в вызывающем коде все равно не изменится.

Если функция должна создать вектор, то пусть и возвращает его
C++
1
std::vector<double> foo();
Согласен, не изменится. Протупил. Функция должна принимать адрес указателя.

Пример в посте абстрактный...
В реальности мне нужно запонить переменную класса double* из вектора.
Если копировать данные вектора, то может для этого есть правильный метод, не через цикл?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.08.2013, 10:22     Можно ли удалить объект std::vector, а данные оставить? #6
http://www.cplusplus.com/reference/algorithm/copy/
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
08.08.2013, 10:29     Можно ли удалить объект std::vector, а данные оставить? #7
Цитата Сообщение от loou Посмотреть сообщение
Если копировать данные вектора, то может для этого есть правильный метод, не через цикл?
у вас неправильные(неполные) представления о векторе как о контейнере.
если цикл вас не устраивает, то вектор вам не годится.
даже если есть какой-то метод, то он все равно будет производить копирование через итераторы циклом, ибо элементы разбросаны в памяти "как попало", их нельзя взять как-то за раз скопом. таков вектор.
массив другое дело, он сидит в памяти цельным куском.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.08.2013, 10:40     Можно ли удалить объект std::vector, а данные оставить? #8
Цитата Сообщение от AntonChik Посмотреть сообщение
элементы разбросаны в памяти "как попало", их нельзя взять как-то за раз скопом. таков вектор.
Приехали.
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
08.08.2013, 10:54  [ТС]     Можно ли удалить объект std::vector, а данные оставить? #9
Цитата Сообщение от AntonChik Посмотреть сообщение
у вас неправильные(неполные) представления о векторе как о контейнере.
если цикл вас не устраивает, то вектор вам не годится.
даже если есть какой-то метод, то он все равно будет производить копирование через итераторы циклом, ибо элементы разбросаны в памяти "как попало", их нельзя взять как-то за раз скопом. таков вектор.
массив другое дело, он сидит в памяти цельным куском.
вообще то
C++
1
double *p=myvector.data();
такая конструкция должна работать и p будет тем масивом который нужен. Я пока не пробовал, но так заявлено.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
08.08.2013, 10:59     Можно ли удалить объект std::vector, а данные оставить? #10
упс. признаю попутал с динамическими списками. почему-то до сих пор казалось что вектор устроен аналогично(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 10:59     Можно ли удалить объект std::vector, а данные оставить?
Еще ссылки по теме:

Вывести значения std::vector<std::vector<int*> > C++
Как изменять размер std::vector<std::vector>? C++
C++ Как удалить первые три элемента в std::vector?

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

Или воспользуйтесь поиском по форуму:
loou
1 / 1 / 0
Регистрация: 02.08.2013
Сообщений: 29
08.08.2013, 10:59  [ТС]     Можно ли удалить объект std::vector, а данные оставить? #11
А имеет смысл пользоваться std:copy для двух массивов? По скорости, читаемости? Короче, принято ей пользоваться для копирования массивов?
Yandex
Объявления
08.08.2013, 10:59     Можно ли удалить объект std::vector, а данные оставить?
Ответ Создать тему
Опции темы

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