c++ - 从 vector 中删除一对并为 vector 对保留空间

标签 c++ vector std-pair c++98

#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. 从 vector 中删除对的注销功能工作正常,但对于删除最后一个元素,它会产生运行时错误。
  2. 我想为这个 vector 类型保留空间,但不知道完成这项工作的正确语法
  3. 请按c++98标准回答
  4. 我对 vector 和 STL 很陌生,所以如果有任何非常微不足道的事情,请提出来。

最佳答案

从 vector 中删除会使迭代器无效,但删除也会返回一个正确的迭代器。

这样做:

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

还有另一个问题。

vector 有预留空间的预留函数。它不会改变大小,只会改变容量。

vector<pair<string, int> > ivec;

int main()
{
  ivec.reserve(100);
}

关于c++ - 从 vector 中删除一对并为 vector 对保留空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36736705/

相关文章:

c++ - c++ - 如何在C++中使用匹配数据类型的两对中的四个元素构造一个元组?

c++ - 什么时候为类创建 v 表?

c++ - 堆栈对象被插入到容器中?

c++ - 从 C++ 中的 "interface"访问派生类成员?

c++ - 在指向对象的指针 vector 中取消引用

c++ - 查找 vector 中最接近的值

c++ - std::pair 正在为其成员之一调用默认构造函数

c++ - undefined reference std::pair

c++ - 如何在 C++ 中限制模板参数?

c++ - 如何使用任意语言环境比较 “basic_string”