Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单Deque初始化问题_C++ - Fatal编程技术网

C++ 简单Deque初始化问题

C++ 简单Deque初始化问题,c++,C++,我使用以下代码在deque中插入了一些数据 int data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; deque<int> rawData (data, data + sizeof(data) / sizeof(int)); 这是什么意思?这是指向数组最后一个元素之外的虚拟元素的指针。sizeof(data)/sizeof(data[0])生成data数组中的元素数dequeconstructor接受“第一个元素的迭代器”和“最后一个元素之外

我使用以下代码在deque中插入了一些数据

int data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};   
deque<int> rawData (data, data + sizeof(data) / sizeof(int));

这是什么意思?

这是指向数组最后一个元素之外的虚拟元素的指针。
sizeof(data)/sizeof(data[0])
生成
data
数组中的元素数
deque
constructor接受“第一个元素的迭代器”和“最后一个元素之外的迭代器”(这就是
end()
iterator产生的结果)。这个构造有效地计算了迭代器将产生的内容。

让我们一点一点地进行计算

data
是显示从何处开始的迭代器。它是数组,但是在C和C++数组中,在任何挑衅上都会变成指针,所以它被用作指针。开始从上的
data
获取数据,并继续直到迭代器结束

结束迭代器的长度超过开始迭代器的长度,因此可以表示为
数据+
,其中
是长度。起始迭代器是一个
int[]
,它被视为
int*
,因此我们希望在
int
s中查找长度。(在C和C++中,指针按指向类型的长度递增) 因此,
sizeof(data)/sizeof(int)
应该是数组的长度
sizeof(data)
是数组的总大小(以字节为单位)。(这是数组和指针之间的区别之一:数组有一个已定义的大小,而指针指向未知大小数组的起点。)
sizeof(int)
是一个int的总大小(以字节为单位),因此商是
int
s中
array
的总大小


我们需要
数组
的大小在
int
s中,因为
数组
衰减为
int*
,因此
数据+x
指向内存位置x
int
s过去的
数据。从一个开始和一个总大小,我们找到了
数据的结尾,因此我们从头到尾复制
数据中的所有内容。

这一点没有任何主观因素,但如果我在这里回答它,当它迁移到堆栈溢出时,我就不必回答它了。这个问题很好,但肯定属于堆栈溢出。我认为对于编程相关的问题,这是我应该首先回答的地方。为什么这个问题属于StackOverflow?StackOverflow是关于代码本身的,而programmers.stackexchange.com则是关于这个职业的。@David Thornley哇,你的答案简直让人大开眼界!天哪!我该说什么!完美的谢谢大家!@无论你说什么,都要小声点说。
data + sizeof(data) / sizeof(int)