如何清除()vector<pair<int,vector> >类型中的内向量?

问题描述 投票:-1回答:2

我已经声明了一个int和向量的向量对为 vector<pair<int,vector<int> > v(10) . 现在我想使用清除功能作为 v[i].clear() 并期望它能清除行 v[i]. 但编译器却抛出了一个错误。请帮助我正确使用clear()函数来清除这种向量声明中的某一行,或者给我一个不同的方法。

c++ vector
2个回答
0
投票

如果你想清除第i'th行,那么你应该使用擦除函数。

v.erase(v.begin() + i);

在你的例子中,这将使你的向量的大小减少一个,只剩下9个元素。

另一方面,如果你想重新初始化第i'th行,使它包含的内容与你第一次创建向量时的10个元素相同,那么你要: --或者---------。

v[i] = pair<int, vector<int> >();

-- 或者 --

v[i].first = 0;
v[i].second.clear();

0
投票

你的外 std::vector 包含 std::pairs和 clear 是一种方法,在 std::vectorstd::pair. 看来你说的可能是这个

v[i].second.clear();

如果你想删除整个 ith元素,那么这就和你问的问题不同了。相反,你可以这样删除它。

v.erase(v.begin() + i);

如果你想完全重置 ith 元素,那么你应该默认这样构造值。

v[i] = pair<int, vector<int> >();

或者像这样

v[i] = std::make_pair(0, std::vector<int>());

另外,请注意,调用 clear 实际上并没有释放出矢量内部的 "保留 "空间,所以如果你的矢量真的很大,而你又想用 真正 摆脱所有的内存,然后你需要分配一个空的(默认构造)向量。另外,你也可以调用使用swap-with-empty这个成语。

v[i].second.swap(std::vector<int>());
© www.soinside.com 2019 - 2024. All rights reserved.