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 включает код, который автоматически инициализирует ваши элементы до нуля.