如何清除()内部矢量的矢量类型>?

问题描述:

我已经宣布了一个向量对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(); 
+0

...是的,这就是我真正想要的......但我不知道'v [i] .second.clear()'会做同样的事情..纠正我,如果我错了:/ – Roshan 2014-10-09 23:27:43

+1

'vector :: erase '需要一个迭代器而不是索引,所以这段代码不起作用。 – b4hand 2014-10-09 23:28:28

+0

它几乎做同样的事情; v [i] .second.clear()不会清除v [i] .first。 – jorgbrown 2014-10-09 23:29:24

您的外层std::vector包含std::pair s和clearstd::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>()); 
+0

哦,是我不好! :)非常感谢你!1 – Roshan 2014-10-09 23:20:19

+0

不,我只是想初始化第i行 – Roshan 2014-10-09 23:33:19

+1

'v.erase [&v [i]]'不会编译。 'v.erase(&v [i])'可以编译,但不能保证:'vector :: iterator'不一定是'T *'。 – aschepler 2014-10-10 00:00:27