我们是否可以使用 [] 而不是 Push_back() 来初始化向量

bee*_*hnu 0 c++ stl vector stdvector

作为向量的一部分,使用 [] 我无法初始化。

std::vector<int> vectorVar;
vectorVar[0] = 0;
Run Code Online (Sandbox Code Playgroud)

看到未定义的行为。

而只有在已经创建的情况下才能使用。

vectorVar.push_back(0);
vectorVar[0] = 5;
Run Code Online (Sandbox Code Playgroud)

但如果有地图,即使没有条目也可以使用。

std::map<int, std::vector<int>> mapVar;
mapVar[0] = vectorVar;
Run Code Online (Sandbox Code Playgroud)

请澄清。

感谢和问候 毗湿奴比玛

如果“vectorVar[0] = 0;”,则会出现未定义的行为

for*_*818 7

std::map::operator[]与其他有些不同,[]因为它不仅仅是元素访问。更多的是。

来自cppreference

返回对映射到与 key 等效的键的值的引用,如果该键不存在则执行插入。

当映射中没有具有给定键的元素时,会将一个元素插入到映射中。

向量不是这样工作的。std::vector::operator[]不向向量中插入元素。

一般来说,您需要获得可以查找内容的参考。C++ 太复杂了,无法记住所有内容。我建议使用https://en.cppreference.com/,因为它通常与标准中的措辞相当接近,但同时又非常可读。

  • 作为这个答案的补充,还值得注意的是:“map”是一个键值容器,“myMap[300]”的存在并不意味着键 0 到 299 必须存在。另一方面,“向量”是一个连续的容器,如果“myVector[300]”存在,则“myVector”还必须包含索引 0 到 299。 (2认同)