简单的 Deque 初始化问题
Simple Deque initialization question
我使用以下代码在双端式中插入了一些数据。
int data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
deque<int> rawData (data, data + sizeof(data) / sizeof(int));
但我不明白这部分代码,
data + sizeof(data) / sizeof(int)
什么意思?
让我们一点一点地看。
data
是显示从何处开始的迭代器。 它是一个数组,但在 C 和 C++ 数组中衰减到任何挑衅的指针,因此它被用作指针。 从data
开始接收数据,并一直持续到结束迭代器。
开始迭代器高出一定量,因此可以表示为 data + <something>
,其中 <something>
是长度。 开始迭代器是一个被视为int *
的int []
,所以我们想找到以 int
s 为单位的长度。 (在 C 和 C++ 中,指针按指向类型的长度递增。
因此,数组的长度应sizeof(data) / sizeof(int)
。 sizeof(data)
是数组的总大小(以字节为单位)。 (这是数组和指针之间的区别之一:数组具有定义的大小,而指针指向可能是未知大小数组的开头。 sizeof(int)
是 int 的总大小(以字节为单位),因此商是以 int
s 为单位的 array
的总大小。
我们希望array
的大小以 int
s 为单位,因为array
衰减成int *
,因此data + x
指向内存位置 x int
s 过去的data
。 从开始和总大小,我们找到了 data
的结尾 ,因此我们从头到尾data
复制所有内容。
这是指向数组最后一个元素之外的虚构元素的指针。sizeof(data)/sizeof(data[0])
生成数组data
元素数。 deque
构造函数接受"第一个元素的迭代器"和"最后一个元素之外的迭代器"(这就是迭代器产生end()
)。此构造有效地计算.end()
迭代器将产生的结果相同。
- C++转换参数初始化问题
- 运行时C++数组初始化问题
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- C++初始化具有 int 0 问题的unique_ptr
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- 在构造函数 c++ 中初始化属性时出现问题
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- shared_ptr类的向量的向量初始化问题
- public:静态常量字符串声明/初始化问题
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 使用 true 初始化布尔数组时出现问题
- 为什么C++中的大括号初始化可以解决STL容器的初始化问题
- 程序在没有输入的情况下退出,它有基本的,驱动的类属性初始化问题
- C++中构造函数的对象初始化出现问题
- 初始化com对象的问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 理解向量初始化时出现问题