![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
Кстати!
Я не советую использовать vector<vector<>>. Это очень полохая практика. Лучше vector<vector<>*>. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
ROTFL. Извиняюсь. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Согласен с Void. В более мягкой форме: LOL.
-------------------- ![]() |
|||
|
||||
| Djuffin |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
В чем я не прав? Представляете что происходит каждый раз когда верхний вектор перераспределяет память, для добавления нового элемента? Это сообщение отредактировал(а) Djuffin - 22.10.2006, 19:18 |
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Вполне. А вы? Hint: sizeof(vector<T>). -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
||||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
При том, что отличие вектора от указателя на вектор с т.з. оверхеда на выделение и перевыделение памяти минимальное.
Т.е. вы хотите сказать, что
С чего вдруг? Добавлено @ 19:55 mr.DUDA, отдели пожалуйста ветку в cpp.general. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Модератор: вынес тему из C#
-------------------- ![]() |
|||
|
||||
| Djuffin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
||||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Аналогично. Каким образом это затрагивает память, выделенную под содержимое остальных векторов? Хотя, должен признаться, это implementation defined. Но разумная реализация копиктора и swap таких вещей делать не должна. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Djuffin |
|
||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 18.3.2005 Репутация: 1 Всего: 2 |
ВОТ! Золотые твои слова Проведем расследование.
Результаты. Тут есть overhead.
А тут нету.
ВЫВОДЫ: (которые я для себя сделал) 0. Когда имеешь дело с STL надо хорошо обдумывать каждую строку кода. 1. Я отстал от современных реализаций STL. 2. На ROTFL мое замечание не тянет. |
||||||||||||
|
|||||||||||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
лол, если автор поста хотел пошутить, то посмеялся, а если нет - плакать надо |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
В мелкомягкой реализации вектор содержит массив указателей на объекты, а не сами объекты. Поэтому алгоритм copy всего лишь скопирует N указателей при расширении массива (когда capacity не хватает).
-------------------- ![]() |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Visual Studio N \ VC \ include \ vector З.Ы. а что, разные бывают что ли ? -------------------- ![]() |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Насколько я читал, STL по определению реализует семантику значений, а не указателей. Поэтому если я копирую вектор, то мне же нужно скопировать значения из вектора, а не указатели на них!
Это, по-моему, описано в стандарте. В этом случае мелкомягкие .... <ваша фантазия> Но я себе это плохо представляю...
mr.DUDA, ты уверен в этом? |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
+++ Погорячился -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Насколько я смог понять, да. Значения лежат в классе-обёртке _Alloc, которая в свою очередь лежит в векторе. Если я не прав, ногами не пинайте, я смотрю что тут сишники собрались хардкорные. Хм, пример ? -------------------- ![]() |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Во-первых, _Alloc зависит от реализации.
У него даже не факт, что имя такое... Во-вторых, контейнеры STL реализуют семантику значений, и по сему указатели там хранится в принципе не могут. Кроме того, для контейнера std::vector гарантируется, что элементы будут лежать рядом, и к элементам вектора можно обращаться как к обычному массиву. Как вариант, там может хранится указатель на начало массива и, допустим, количество элементов... Но там есть еще много нюансов... типа количества выделенной памяти, буферов и т.д. Если нужно хранить указатели на элементы - пожалуйста, храните объекты T*, кто запрещает?.. Примеры реализаций: STLport Dinkumware Standart C++ Library Microsoft - ... GNU - ... Это навскидку, а есть еще и другие... |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Вполне возможно Неверный вывод о том, что обёртка содержит указатель, который и копируется в copy constructor
+1 маньяк ! -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |