【发布时间】:2019-12-19 17:50:35
【问题描述】:
在下面的代码中,
是什么意思vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );
在main()?
vector<int> bubbleSort(vector<int> avector) { //the vector for bubble sort
for (int passnum = avector.size()-1; passnum > 0; passnum -= 1) {
for (int i = 0; i < passnum; i++) {
if (avector[i] > avector[i+1]) {
int temp = avector[i];
avector[i] = avector[i+1];
avector[i+1] = temp;
}
}
}
return avector;
}
int main() {
// Vector initialized using a static array
static const int arr[] = {54,26,93,17,77,31,44,55,20};
vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );
vector<int> bvector = bubbleSort(avector);
for (unsigned int i = 0; i < bvector.size(); i++) {
cout<<bvector[i]<< " ";
}
return 0;
}
谢谢!
杰夫
【问题讨论】:
-
如果
arr是一个数组(不是指针),就像在您的代码中一样,那么sizeof(arr)是整个数组在内存中的大小,sizeof(arr[0])是一个数组的大小数组的元素,所以sizeof(array)/sizeof(array[0])是数组中元素的数量。在avector的定义中,arr被转换为一个指针(等于&arr[0]),arr + sizeof(arr)/sizeof(arr[0])是arr的过去的地址。所以代码正在创建一个包含arr的所有元素的向量。除非编译器知道arr是一个数组,否则该技术不起作用。 -
sizeof(arr)/sizeof(arr[0])是一个用于获取数组大小的 C hack。在 C++ 中,初始化应该写成vector<int> avector(std::begin(arr), std::end(arr));。