我读了一些用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)
在上面的代码中,我通过iarr和iarr+10来ivector(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)
模板参数InputIterator是int*(这是表达式的类型iarr和iarr + 10).
由于文档声明_Last必须指向超出范围中最后一个元素的一个元素,因此+ 10复制数组中的所有10个元素也是正确的(iarr + 9指向最后一个元素,iarr + 10指向最后一个元素之外的一个元素).
数组的简单帮助:
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)
而且不用担心数组的大小,它会自动计算.