MT>ничего не копирует.
И правильно делает . Так что либо заранее выделяй память, как в твоем втором варианте, либо используй, к примеру, back_inserter:
L_L>Надо думать, со старым динкумваре стл это не сработает?
Именно вот этот пример, т.е. из "однотипного" вектора в список — сработает, а вот наоборот, или даже из vector<short> в list<long> — уже нет.
MT>Это стандартное поведение? Должен ли вектор заботится о выделении дополнительной памяти?
MT>Зарание спасибо!
Не должен. Потому что алгоритм std::copy принимает итераторы, и он не знает какие это итераторы — может это тоже лист, а может вектор, а может мап... То есть не зная тип контейнера std::copy никак не сможет распределить память. Но если ты не хочешь делать предварительно resize() воспользуйся std::inserter()/std::back_inserter() в зависимости от того, что тебе конкретно нужно.
Удачи тебе, браток!
Re: [STL ] Правильное ли поведение?
От:
Аноним
Дата:
18.10.05 13:38
Оценка:
Здравствуйте, Mr.ToNik, Вы писали:
MT>VC 7.0
MT>Есть: MT>
MT>Это стандартное поведение? Должен ли вектор заботится о выделении дополнительной памяти?
Во-первых, приведенный тобой код не скомпилится, так как у списка нет функции resize. Во-вторых, когда ты копируешь что-то при помощи std::copy, то в контейнере, в который ты копируешь, должно быть достаточно места, иначе получаешь неопределенное поведение. Если ты не можешь делать resize (как в твоем случае), то можно использовать std::back_inserter(yourContainer) как последний аргумент для std::copy
Re[2]: [STL ] Правильное ли поведение?
От:
Аноним
Дата:
18.10.05 13:42
Оценка:
А>Во-первых, приведенный тобой код не скомпилится, так как у списка нет функции resize.