如何清除()内部矢量的矢量类型>?
问题描述:
我已经宣布了一个向量对int和向量为vector<pair<int,vector<int> > v(10)
。现在我想使用清除功能v[i].clear()
,并期望它将清除行v[i]
。但编译器会引发错误。请帮助我正确使用clear()函数来清除此向量声明中的特定行,或者向我建议另一种方法。如何清除()内部矢量的矢量类型<pair <int,vector>>?
答
如果你想消灭i行,那么你要删除:
v.erase(v.begin() + i);
在你的榜样,这会减少矢量的大小,只剩下9个元素。另一方面,如果要重新初始化第i行,以便它包含与第一次创建向量时包含的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();
如果你想从载体删除整个我个元素,那么这是不是你问一个不同的问题。相反,你可以将其删除这种方式:
v.erase(v.begin() + i);
如果你想完全复位我个元素,那么你就应该默认构造这样的值:
v[i] = pair<int, vector<int> >();
或像这样:
v[i] = std::make_pair(0, std::vector<int>());
而且,请注意,调用clear
没有了“保留”的空间里,真正自由了矢量里面,所以如果您的载体是重盟友大,你想真正摆脱所有的内存,那么你需要分配一个空的(默认构造)向量。或者,你可以调用使用swap-与空成语:
v[i].second.swap(std::vector<int>());
...是的,这就是我真正想要的......但我不知道'v [i] .second.clear()'会做同样的事情..纠正我,如果我错了:/ – Roshan 2014-10-09 23:27:43
'vector :: erase '需要一个迭代器而不是索引,所以这段代码不起作用。 – b4hand 2014-10-09 23:28:28
它几乎做同样的事情; v [i] .second.clear()不会清除v [i] .first。 – jorgbrown 2014-10-09 23:29:24