我使用以下代码在双端队列中插入一些数据。
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)
这是什么意思?
答案 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
的总大小。
我们想要array
中int
的大小,因为array
会衰减为int *
,因此data + x
指向内存位置x {{ 1}}过了int
。从一个开头和一个总大小,我们找到了data
的结尾,因此我们将data
中的所有内容从头开始复制到最后。
答案 1 :(得分:0)
这是指向数组最后一个元素之外的虚构元素的指针。 sizeof(data)/sizeof(data[0])
生成data
数组中的元素数。 deque
构造函数接受“第一个元素的迭代器”和“最后一个元素之外的迭代器”(这是end()
迭代器产生的结果)。该构造有效地计算与.end()
迭代器将产生的相同。