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