如何理解"vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) )"?

How to understand "vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) )"?

本文关键字:arr sizeof 何理解 gt int avector vector lt      更新时间:2023-10-16

在下面的代码中,是什么意思

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;
}

谢谢!

杰夫

vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );

arrC 样式数组中初始化一个std::vectoravector

参数是迭代器。这些迭代器定义了一系列元素:

  • arr:迭代到要复制的范围的第一个元素。
  • arr + sizeof(arr) / sizeof(arr[0]):迭代器指向要复制的范围的过去结束元素

C++11 方法是将函数模板std::cbegin()std::cend()用于 C 样式数组:

vector<int> avector(std::cbegin(arr), std::cend(arr));

此方法利用模板参数推导来推断 C 样式数组的大小。这种方式不太容易出错,因为它需要较少的打字。

n = sizeof(arr) / sizeof(arr[0])是数组存储的元素数。

avector(arr, arr + sizeof(arr) / sizeof(arr[0])表示将数组的元素arr复制到向量avector从索引0复制到n-1(含)

avector是通过复制arr的所有元素来构造的。

它使用以下矢量构造函数:

template< class InputIt >
vector( InputIt first, InputIt last, 
const Allocator& alloc = Allocator() );