c++ - 向量定义是什么意思?
问题描述
我一直认为vector<int> vec[10] = {};
在 c++ 中的意思是,我们创建一个 10 个 int 的向量并使它们等于零。但实际上发生了一些完全不同的事情。那么,当我们以这种方式声明向量时会发生什么,为什么?(我认为只是因为在 c++ 中int arr[10] = {}
意味着我们创建了一个包含 10 个元素的数组并使它们等于零)
解决方案
这两个声明之间的唯一区别
int arr[10] = {}
和
vector<int> vec[10] = {};
是类型说明符。
在第一个声明中,声明了一个包含 10 个类型元素的数组int
。
在第二个声明中,声明了一个包含 10 个类型元素的数组std::vector<int>
。
但是,这种差异会影响元素的初始化方式。
在第一个声明中,数组的所有元素都被初始化为零。在第二个声明中,所有元素都使用默认构造函数创建。也就是说,所有 10 个向量都是空的。
如果你想声明一个类型std::vector<int>
为 10 个元素的向量,那么你应该写
std::vector<int> vec( 10 );
在这种情况下,对象vec
将包含 10 个元素,这些元素将被初始化,即int
它们将被零初始化的类型。
推荐阅读
- android - 如何将音频可视化器实现到 exoplayer
- angular - 如何将 riot.js 与 Angular 9 集成
- javascript - Jquery深度克隆不保留事件
- multithreading - 使用多个线程运行时 Jmeter 出错
- java - 如何获取在java中启动的批处理脚本的信息,是否已经结束
- java - Java - IF 语句将值视为 NULL,即使在检查调试时它不是
- javascript - useEffect 依赖于另一个 useEffect 被多次执行,即使使用依赖数组。为什么?
- c# - 将 XML 文件加载到 ReaderSetting
- react-native - 使用开玩笑超时错误进行排毒:“分配给未定义”
- ios - ios swift 5 5分钟后定时器完成时如何删除单元格索引,当调用api时不会重复相同索引的定时器