如何在矢量<pair <int,vector>&gt;?</pair <int,vector>中清除()内部矢量?

时间:2014-10-09 23:16:05

标签: c++ vector clear

我已将int和vector的向量对声明为vector<pair<int,vector<int> > v(10)。现在我想使用清除函数v[i].clear()并期望它将清除行v[i]。但是编译器会抛出错误。请帮我正确使用clear()函数来清除这种向量声明中的特定行,或者建议我采用不同的方式。

2 个答案:

答案 0 :(得分:0)

您的外std::vector包含std::pairclearstd::vector而不是std::pair的方法。看起来你可能是这个意思:

v[i].second.clear();

如果您想从向量中删除整个 i 元素,那么这与您提出的问题不同。相反,你可以这样删除它:

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

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

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

或者像这样:

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

另外,请注意,调用clear实际上并没有释放向量中的“保留”空间,所以如果你的向量非常大并且你想真正摆脱所有在内存中,你需要分配一个空的(默认构造的)向量。或者,您可以使用swap-with-empty idiom:

v[i].second.swap(std::vector<int>());

答案 1 :(得分:0)

如果你要消灭第i行,那么你想要擦除:

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

在您的示例中,这会将矢量的大小减小一个,只剩下9个元素。

另一方面,如果你想重新初始化第i行,那么它包含的内容与你第一次创建向量时所包含的内容相同,那么你需要:

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

- 或 -

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