简单的 Deque 初始化问题



我使用以下代码在双端式中插入了一些数据。

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()迭代器将产生的结果相同。

最新更新