从矢量中删除一对并为矢量对保留空间
Erasing a pair from vector and reserving space for vector pair
#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();
}
- 从矢量中擦除对的注销函数工作正常,但对于擦除最后一个元素,它会给出运行时错误。
- 我想为这种矢量类型保留空间,但不知道完成工作的正确语法
- 请根据 c++ 98 标准回答
- 我对矢量和 stl 很陌生,所以如果有什么非常微不足道的事情,请提及。
从
向量中擦除会使迭代器无效,但擦除也会返回正确的迭代器。
这样做:
if(iter->second==id){
iter = ivec.erase(iter);
}
else
++iter;
对于另一个问题。
矢量具有保留空间的保留功能。 它不会改变大小,只会改变容量。
vector<pair<string, int> > ivec;
int main()
{
ivec.reserve(100);
}
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 写入 std::vector 的保留空间会导致分段错误吗?
- 自定义容器在保留空间时不必要地创建新元素实例
- 为变量和激活记录保留空间
- 如何在堆栈上为非默认构造对象保留空间
- 从矢量中删除一对并为矢量对保留空间
- std::basic_string构造函数如何事先知道要保留多少空间
- 如何在不初始化每个元素的情况下为数组保留空间
- 如何在 Cython 包装器中保留复杂的 C++ 命名空间
- C++ : 使用 std::vector::reserve 减少保留空间
- 全局命名空间中的保留名称
- 在硬盘上为应用程序保留空间
- 为什么"std::string::reserve()"不保留我指定的确切空间量?
- 动态数组的Do实现在开始时保留空间,以备准备
- 为什么堆栈帧上保留的空间比x86中需要的空间多
- 为结构体保留内存空间时
- 如何为std::vector/std::string保留空间?
- 如果向量有足够的空间(通过保留创建),std::vector::insert()是否会使迭代器无效