我在尝试构建vector
时遇到错误int data[] = { 1, 2, 3, 4, 4, 3, 7, 8, 9, 10 }; // source
std::vector<int> vv(data, data + 10); // ok
std::vector<int> vv(std::begin(data), std::end(data + 10)); // Error
GCC输出:
main.cpp:59:61:错误:没有匹配函数来调用'end(int *)'
std::vector<int> vv(std::begin(data), std::end(data + 10));
为什么我收到此错误?
答案 0 :(得分:9)
由于+ 10
导致错误,导致array of T
到pointer to T
的衰减。有一个std::end
重载需要(引用)一个数组,但是不是一个用于获取指针。
只需使用:std::vector<int> vv(std::begin(data), std::end(data));
或者,只需使用:
std::vector<int> vv{1, 2, 3, 4, 4, 3, 7, 8, 9, 10};
...并完全跳过使用数组。
答案 1 :(得分:0)
通常在不知道大小时在数组上使用std::end
。定义std::end
使得它将推导出大小并返回指向该偏移量的指针:
std::vector<int> v(begin(data), end(data));
答案 2 :(得分:-3)
考虑到你也可以使用算法std :: iota将向量的元素设置为递增的数字序列。
例如
const size_t N = 20;
std::vector<int> v( N );
std::iota( v.begin(), v.end(), 1 );