关于c ++中的向量的问题

8 c++ arrays vector

我读了一些用c ++编写的代码如下:

#include <algorithm>
#include <iostream> 
#include <vector>

using namespace std;

int main() {
    int iarr[] = {30, 12, 55, 31, 98, 11, 41, 80, 66, 21};
    vector<int> ivector(iarr, iarr + 10);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我通过iarriarr+10ivector(iarr, iarr + 10)创建一个新的载体,这是构建一个适当的方式vector?我检查了STL文件,那里没有提到,这是允许的吗?

而且,数组iarr包含10个元素,我应该使用ivector(iarr, iarr+9)吗?

Jon*_*Jon 12

是的,这是允许的,是的,你做得对.

您正在调用此模板化构造函数:

template<class InputIterator>
   vector(
      InputIterator _First,
      InputIterator _Last
   );
Run Code Online (Sandbox Code Playgroud)

模板参数InputIteratorint*(这是表达式的类型iarriarr + 10).

由于文档声明_Last必须指向超出范围中最后一个元素一个元素,因此+ 10复制数组中的所有10个元素也是正确的(iarr + 9指向最后一个元素,iarr + 10指向最后一个元素之外的一个元素).


Mat*_* M. 5

数组的简单帮助:

template <typename T, size_t N>
size_t size(T(&)[N]) { return N; }

template <typename T, size_t N>
T* begin(T(&array)[N]) { return array; }

template <typename T, size_t N>
T* end(T(&array)[N]) { return array + N; }
Run Code Online (Sandbox Code Playgroud)

现在你可以写:

int main() {
  int const arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
  std::vector<int> vec(begin(arr), end(arr));
}
Run Code Online (Sandbox Code Playgroud)

而且不用担心数组的大小,它会自动计算.