向量<pair<string, string>>擦除()不减少大小[关闭]

问题描述 投票:0回答:1
#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++ vector stdvector std-pair erase
1个回答
0
投票

按照评论中的建议,您需要从向量中删除条目,如果用普通 C++ 风格编写,内容将被清除。

使用

std::vector::erase()
,您可以通过传递开始和结束迭代器来指定要擦除的范围。

对于你的代码,就像这样

vec.erase(vec.begin() + 1, vec.end() - 2);
© www.soinside.com 2019 - 2024. All rights reserved.