Std:: list resize дает неожиданные результаты
Я просто изучаю и имею довольно глупый вопрос.
У меня есть 2 контейнера, один вектор, а один - список. Они оба заполнены ints 1,2,3,4. После инициализации я изменяю размер контейнера до семи, а затем распечатываю содержимое контейнера.
#include <iostream>
#include <vector>
#include <list>
int main ()
{
std::list<int> lst= {1,2,3,4};
std::vector<int> vec = {1,2,3,4};
lst.resize(7);
vec.resize(7);
for (auto p = lst.begin(); p!=lst.end(); ++p)
std::cout<<"List: "<<*p<<std::endl;
for (auto p = vec.begin(); p!=vec.end(); ++p)
std::cout<<"Vector: "<<*p<<std::endl;
return 0;
}
На выходе я получаю:
List: 1
List: 2
List: 3
List: 4
List: 0
List: 1994995248
List: 0
Vector: 1
Vector: 2
Vector: 3
Vector: 4
Vector: 0
Vector: 0
Vector: 0
Должен ли я явно указывать список, который я добавляю 0s, чтобы избежать этого?
Ответы
Ответ 1
Как сообщают другие пользователи, lst.resize(7,0)
решит вашу проблему. Используя lst.resize(7)
и оставляя значение инициализации, компилятор сообщает, что не имеет значения, какое значение (предположительно, потому что вы собираетесь установить его позже). Это позволяет операционной системе оставлять любое случайное значение в памяти, а не тратить ресурсы на его изменение.
С другой стороны, контейнер Vector
включает код, который автоматически инициализирует ваши элементы до нуля.