简单的Deque初始化问题

时间:2011-05-10 13:26:39

标签: c++

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

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)

这是什么意思?

2 个答案:

答案 0 :(得分:3)

让我们一点一点地抓住它。

data是显示从哪里开始的迭代器。它是一个数组,但在C和C ++数组中衰减到任何激发的指针,因此它被用作指针。开始从data开始接收数据,并继续直到结束迭代器。

结束迭代器在启动迭代器之后是一定量,因此它可以表示为data + <something>,其中<something>是长度。开始迭代器是int [],被视为int *,因此我们希望在int s中找到长度。 (在C和C ++中,指针按指向类型的长度递增。)

因此,sizeof(data) / sizeof(int)应该是数组的长度。 sizeof(data)是数组的总大小(以字节为单位)。 (这是数组和指针之间的差异之一:数组具有已定义的大小,而指针指向可能是未知大小的数组的开头。)sizeof(int)是int的总大小(以字节为单位),因此,商是array s中int的总大小。

我们想要arrayint的大小,因为array会衰减为int *,因此data + x指向内存位置x {{ 1}}过了int。从一个开头和一个总大小,我们找到了data的结尾,因此我们将data中的所有内容从头开始复制到最后。

答案 1 :(得分:0)

这是指向数组最后一个元素之外的虚构元素的指针。 sizeof(data)/sizeof(data[0])生成data数组中的元素数。 deque构造函数接受“第一个元素的迭代器”和“最后一个元素之外的迭代器”(这是end()迭代器产生的结果)。该构造有效地计算与.end()迭代器将产生的相同。