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

标签 c++ arrays vector stl

在下面的代码中,

是什么意思
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]) );

arr C 风格数组中初始化一个 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 风格数组的大小。这种方式不太容易出错,因为它需要较少的输入。

关于c++ - 如何理解 "vector<int> avector (arr, arr + sizeof(arr)/sizeof(arr[0]) )"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57473221/

相关文章:

C++从文件填充结构数组

arrays - 如何将数组传递给 bash 函数

c++ - 为什么填充我的 std::vector 的运行时间在 0 到 ~16 毫秒之间跳跃?

c++ - 在不显式传递实例的情况下从内部类访问外部类

c++ - QT 5.0 中疯狂的 CPU 使用率

iOS - 从数组中获取第一个非空字符串元素

c - vector 线性插值与线性外插相同吗?

c++ - 覆盖矩阵中 vector 对象的代理类中的赋值运算符?

c++ - 如何检查我的输入文件是否已更新?

python - 在 Python 中传递数组/列表的子集引用作为参数