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

Jef*_*eng 1 c++ arrays stl vector

在下面的代码中,什么是

vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

杰夫

Ank*_*mar 5

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

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

  • 可能更好地说“0”到“n-1”(包含) 说“0”到“n”(不包括)可能会被误解,特别是非母语人士(例如,它是否适用于“ 0` 和 `n`,或者 [如您所愿] 到 `n`?) (3认同)

眠りネ*_*ネロク 5

vector<int> avector (arr, arr + sizeof(arr) / sizeof(arr[0]) );
Run Code Online (Sandbox Code Playgroud)

从C样式数组初始化std::vector,。avectorarr

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

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

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

vector<int> avector(std::cbegin(arr), std::cend(arr));
Run Code Online (Sandbox Code Playgroud)

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