#include<iostream>
#include<vector>
using namespace std;
int main()
{
std::vector<std::pair<string, string> > vec1 = { {"1", "0"}, {"2","0"}, {"3","1"}, {"4","7"}, {"8","9"}};
cout << "Size of vector: " << vec1.size() << endl;
for (int i = 0; i < vec1.size(); i++)
{
cout << vec1[i].first << " " << vec1[i].second << endl;
}
for (int i = 1; i < vec1.size()-2; i++)
{
vec1[i].first.erase();
vec1[i].second.erase();
}
std::cout << endl << endl;
cout << "Size of vector: " << vec1.size() << endl;
for (int i = 0; i < vec1.size(); i++)
{
cout << vec1[i].first << " " << vec1[i].second << endl;
}
return 0;
}
输出:
Size of vector: 5
1 0
2 0
3 1
4 7
8 9
Size of vector: 5
1 0
4 7
8 9
正如你所看到的,在erase()之后向量的大小没有改变。我希望向量的大小会减小并且值会填充空白。有没有办法在使用擦除()的地方不留空白,而是让值自动填充向量中的空白?这是我期待的输出:
Size of vector: 5
1 0
2 0
3 1
4 7
8 9
Size of vector: 3
1 0
4 7
8 9
按照评论中的建议,您需要从向量中删除条目,如果用普通 C++ 风格编写,内容将被清除。
使用
std::vector::erase()
,您可以通过传递开始和结束迭代器来指定要擦除的范围。
对于你的代码,就像这样
vec.erase(vec.begin() + 1, vec.end() - 2);