Здравствуйте, Valus, Вы писали:
V>Есть ли возможность сделать быстрое std::copy(), т.е. <O(N)
Нет, включи элементарную логику. Что бы присвоить N объектов, надо N присваивание ^_^
Правильно работающая программа — просто частный случай Undefined Behavior
Здравствуйте, _Winnie, Вы писали:
_W>Нет, включи элементарную логику. Что бы присвоить N объектов, надо N присваивание ^_^
я просто гне так выразился...
что-то типа: не копирование, а перенос! Просто создавать нужно именно list, а дальше работать с vector. Можно ли быстро перенести данные?
_W>>Нет, включи элементарную логику. Что бы присвоить N объектов, надо N присваивание ^_^ V>я просто гне так выразился... V>что-то типа: не копирование, а перенос! Просто создавать нужно именно list, а дальше работать с vector. Можно ли быстро перенести данные?
Нет. Список элементов (list) нельзя превратить в непрерывный блок памяти (vector) без копирования.
Здравствуйте, Elich, Вы писали:
_W>>>Нет, включи элементарную логику. Что бы присвоить N объектов, надо N присваивание ^_^ V>>я просто гне так выразился... V>>что-то типа: не копирование, а перенос! Просто создавать нужно именно list, а дальше работать с vector. Можно ли быстро перенести данные?
E>Нет. Список элементов (list) нельзя превратить в непрерывный блок памяти (vector) без копирования.
а что происходит с вектором, если
а) изначально он пуст
б) добавим push_back() N раз
в этом случае вектор увеличится и перестроится все N раз или как-то иначе, я росто что-то такое слышал, что не все N раз...?
Здравствуйте, Valus, Вы писали:
V> б) добавим push_back() N раз V>в этом случае вектор увеличится и перестроится все N раз или как-то иначе, я росто что-то такое слышал, что не все N раз...?
При выделении нового блока памяти его размер будет кратен текущей емкости контейнера. В большинстве реализаций vector и string используется двухкратное увеличение, то есть при каждом выделении дополнительной памяти емкость контейнера увеличивается вдвое.
Здравствуйте, Valus, Вы писали:
E>>Нет. Список элементов (list) нельзя превратить в непрерывный блок памяти (vector) без копирования.
V>а что происходит с вектором, если V> а) изначально он пуст V> б) добавим push_back() N раз V>в этом случае вектор увеличится и перестроится все N раз или как-то иначе, я росто что-то такое слышал, что не все N раз...?
В худшем случае произойдет перераспределение памяти N раз. Но на практике, как верно сказал GregZ, память при очередном перераспределеии добавляется "с запасом". То есть фактическое перераспределение произойдет менее N раз.
Если число элементов для вставки в вектор заранее известно, можно явно попросить вектор выделить нужное количество памяти для них — вызовом метода vector::reserve, таким образом вовсе избежав перераспределений памяти в процессе вставки элементов.