C++ 简单Deque初始化问题
我使用以下代码在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接受“第一个元素的迭代器”和“最后一个元素之外
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
指向内存位置xint
s过去的数据。从一个开始和一个总大小,我们找到了数据的结尾,因此我们从头到尾复制数据中的所有内容。这一点没有任何主观因素,但如果我在这里回答它,当它迁移到堆栈溢出时,我就不必回答它了。这个问题很好,但肯定属于堆栈溢出。我认为对于编程相关的问题,这是我应该首先回答的地方。为什么这个问题属于StackOverflow?StackOverflow是关于代码本身的,而programmers.stackexchange.com则是关于这个职业的。@David Thornley哇,你的答案简直让人大开眼界!天哪!我该说什么!完美的谢谢大家!@无论你说什么,都要小声点说。
data + sizeof(data) / sizeof(int)