我对C ++中的std :: vector有疑问。 如何将第一个向量中的少数元素放入第二个向量中。 在向量构造函数中? 这是我的代码,它不起作用:
std::vector<int> a;
int i;
for (i=0;i<10;i++) a.at(i)=10;
std::vector<int> b(&a.at(4), &a.at(7));
我期望向量b是来自向量a [4] - a [7]的元素 你能帮我吗
答案 0 :(得分:5)
std::vector<T>
有一个constructor *,它接受一对迭代器。您可以像这样使用它:
std::vector<int> b(a.cbegin() + 4, a.cbegin() + 7);
*请参阅链接页面上的第4个构造函数签名。
请注意,这不包括a[7]
,因为正如@taskinoor所指出的那样,第二个迭代器是复制范围结束之后的一个迭代器。如果您还打算包含a[7]
,则应将第二个参数更改为a.cbegin() + 8
。
答案 1 :(得分:2)
std::vector<int> a;
int i;
for (i=0;i<10;i++) a.at(i)=10;
此代码将抛出std::out_of_range
异常,因为a.size()
为零。
std::vector<int> b(&a.at(4), &a.at(7));
这不包括a[7]
,因为两个迭代器/位置的构造函数是开放式的,即[first, last)
。因此,不会包含last
a[7]
。如果要包含a[7]
,则必须将a[8]
指定为结束时间间隔。
std::vector<int> b(&a.at(4), &a.at(8));
或者
std::vector<int> b(&a[4], &a[8]);
但如果8
超出范围,这将无效。所以如果使用at
或operator[]
,你应该使用像@TerraPass这样的迭代器:
std::vector<int> b(a.cbegin() + 4, a.cbegin() + 8);