Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> vector 
:(
    Опции темы
Userman
Дата 11.7.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 21.8.2008

Репутация: нет
Всего: нет



Есть класс, содержащий вектор. Есть метод, который на основе этого вектора создаёт новый такого же размера, затем вектор, который является полем класса должен стать новым вектором.
Читал, что если надо присвоить один список другому, но присвоенный после этого не нужен, то подойдёт std::swap.
Можно ли как-нибудь объектам ветора поменять выделенные области памяти?
P.S. Решение использовать указатель на вектор а не вектор я вижу.

Это сообщение отредактировал(а) Userman - 11.7.2009, 17:28
PM MAIL   Вверх
Lazin
Дата 11.7.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Userman @  11.7.2009,  17:22 Найти цитируемый пост)
Так же ли реализован swap для объектов вектора одинакового размера, или будет поэлементный обмен?

нет, просто указатели на данные векторов поменяются местами
PM MAIL Skype GTalk   Вверх
Proger10
Дата 11.7.2009, 17:28 (ссылка)  | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



А вот интересно.. почему класс называется вектором, а означает фактически - массив данных? smile Вектор ведь всегда куда-то направлен, а куда направлен массив?
PM MAIL   Вверх
Userman
Дата 11.7.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 21.8.2008

Репутация: нет
Всего: нет



Цитата(Lazin @ 11.7.2009,  17:25)
Цитата(Userman @  11.7.2009,  17:22 Найти цитируемый пост)
Так же ли реализован swap для объектов вектора одинакового размера, или будет поэлементный обмен?

нет, просто указатели на данные векторов поменяются местами

Значит поэлементного обмена не будет? И вектор-поле станет новым вектором очень быстро независимо от размера?
Происходит проверка на то совпадают ли размеры и если совпадает, тогда меняются указатели на данные?
PM MAIL   Вверх
zim22
Дата 11.7.2009, 17:39 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Proger10 @  11.7.2009,  17:28 Найти цитируемый пост)
 Вектор ведь всегда куда-то направлен, а куда направлен массив?

в небеса.
***
математическая абстракция "вектор" в С++ реализована посредством класса std::valarray


--------------------
PM MAIL   Вверх
mes
Дата 11.7.2009, 17:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Userman @  11.7.2009,  16:37 Найти цитируемый пост)
Происходит проверка на то совпадают ли размеры и если совпадает, тогда меняются указатели на данные? 

а зачем проверять ? у одного вектора размер 1 байт у другого миллиард, поменяли указатели на области, теперь миллиард принадлежит первому, а один байт второму вектору.
smile 
P.S. Естественно, помимо значений указателей на блок данных, меняется и переменная размер..




Это сообщение отредактировал(а) mes - 11.7.2009, 17:54


--------------------
PM MAIL WWW   Вверх
Userman
Дата 11.7.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 21.8.2008

Репутация: нет
Всего: нет



ясно, спасибо
PM MAIL   Вверх
mes
Дата 11.7.2009, 18:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Proger10 @  11.7.2009,  16:28 Найти цитируемый пост)
А вот интересно.. почему класс называется вектором, а означает фактически - массив данных?

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

http://ru.wikipedia.org/wiki/%D0%92%D0%B5%...B8%D0%BA%D0%B0)


--------------------
PM MAIL WWW   Вверх
Userman
Дата 11.7.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 21.8.2008

Репутация: нет
Всего: нет



Код

vector<T> f1()
{
    vector<T> v;
    //...
    return v;
}

void f2(vector<T> *v)
{
    //...
}

Сильно ли отличается по времени выполнения
Код

vector<T> x = f1()

от
Код

vector<T> x;
f2(&x);

PM MAIL   Вверх
azesmcar
Дата 11.7.2009, 21:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Userman @  11.7.2009,  21:38 Найти цитируемый пост)
Сильно ли отличается по времени выполнения

Если оптимизация включена - нет.
Прочитай про RVO

Но мое мнение - лучше не писать код зависящий от оптимизатора.
PM   Вверх
Userman
Дата 11.7.2009, 22:00 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 21.8.2008

Репутация: нет
Всего: нет



А объект возвращаемый функцией копирует то, что записано в return, или пока происходит работа с возвращённым значением, локальный объект функции, который возвращается, живёт?
сравним ли по скорости выполнения
Код

vector<T> x;
swap(x, f1());

с
Код

vector<T> x;
f2(&x);
?
P.S А ещё вопрос по поводу включенности оптимизатора. Если он выключен будет ли for(int i=0; i<n; i++) работать медленнее, чем for(int i=0; <n; ++i) ?

Это сообщение отредактировал(а) Userman - 11.7.2009, 22:04
PM MAIL   Вверх
azesmcar
Дата 11.7.2009, 22:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Эта тема уже раз 100 обсуждалась.

http://forum.vingrad.ru/forum/topic-229478...tml#st_0_view_0

PM   Вверх
andrew_121
Дата 11.7.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Прошу прощения за оффтоп.

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

п.с.
вопрос из области философии?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 11.7.2009, 23:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



andrew_121, Имхо, потому что одни стараются решить свои проблемы сами, пользуясь документацией и гуглем, a  другие хотят, чтоб  за них разжевали smile


Это сообщение отредактировал(а) mes - 11.7.2009, 23:35


--------------------
PM MAIL WWW   Вверх
Userman
Дата 11.7.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 21.8.2008

Репутация: нет
Всего: нет



не только поэтому, мне, например, надо разобраться как сделать, чтобы это быстро работало, но сейчас нет времени на то, чтобы читать всё подряд пока не найду ответ на свой вопрос. И в поисковик неизвестно что вписать. "Как быстро присвоить одному вектору другой, когда другой не нужен?"
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0987 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.