从矢量中删除一对并为矢量对保留空间

Erasing a pair from vector and reserving space for vector pair

本文关键字:空间 保留 删除      更新时间:2023-10-16
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector < pair <string,int> > ivec;
//ivec.reserve((pair <string,int>)(10);
void logout(int id)
{
    vector < pair<string,int> > :: iterator iter=ivec.begin();
    while(iter!=ivec.end())
    {
        if(iter->second==id){
            ivec.erase(iter);
        }
        ++iter;
    }
}
void login(char str[],int id)
{
    pair<string,int> temp;
    temp.first=(string)str,temp.second=id;
    ivec.push_back(temp);
}
int main(void)
{
    int ch;
    pair<string,int> temp;
    temp.first="server",temp.second=0;
    ivec.push_back(make_pair("server",0));
    while(true)
    {
        char name[10];
        int id;
        cin>>name;
        cin>>id;
        cout<<"login"<<endl;
        cin>>ch;
        if(ch==1)
        {
            login(name,id);
        }
        else
        {
            break;
        }
    }
    cout<<ivec.size();
    logout(6);
    cout<<ivec.size();
}
  1. 从矢量中擦除对的注销函数工作正常,但对于擦除最后一个元素,它会给出运行时错误。
  2. 我想为这种矢量类型保留空间,但不知道完成工作的正确语法
  3. 请根据 c++ 98 标准回答
  4. 我对矢量和 stl 很陌生,所以如果有什么非常微不足道的事情,请提及。

向量中擦除会使迭代器无效,但擦除也会返回正确的迭代器。

这样做:

if(iter->second==id){
  iter = ivec.erase(iter);
}
else
  ++iter;

对于另一个问题。

矢量具有保留空间的保留功能。 它不会改变大小,只会改变容量。

vector<pair<string, int> > ivec;
int main()
{
  ivec.reserve(100);
}