我已将int和vector的向量对声明为vector<pair<int,vector<int> > v(10)
。现在我想使用清除函数v[i].clear()
并期望它将清除行v[i]
。但是编译器会抛出错误。请帮我正确使用clear()函数来清除这种向量声明中的特定行,或者建议我采用不同的方式。
答案 0 :(得分:0)
您的外std::vector
包含std::pair
和clear
是std::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();