从向量中删除一对并为向量对保留 space
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();
}
- 用于从向量中删除对的注销功能工作正常,但对于删除最后一个元素,它会出现 运行 时间错误。
- 我想为这个向量类型保留 space 但不知道正确的语法来完成这项工作
- 请按c++98标准回答
- 我对 vector 和 stl 很陌生,所以如果有什么非常微不足道的事情请提出来。
从向量中删除会使迭代器无效,但也会删除 returns 一个正确的迭代器。
这样做:
if(iter->second==id){
iter = ivec.erase(iter);
}
else
++iter;
还有另一个问题。
vector 有一个保留功能,可以保留 space。它不会改变大小,只会改变容量。
vector<pair<string, int> > ivec;
int main()
{
ivec.reserve(100);
}
#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();
}
- 用于从向量中删除对的注销功能工作正常,但对于删除最后一个元素,它会出现 运行 时间错误。
- 我想为这个向量类型保留 space 但不知道正确的语法来完成这项工作
- 请按c++98标准回答
- 我对 vector 和 stl 很陌生,所以如果有什么非常微不足道的事情请提出来。
从向量中删除会使迭代器无效,但也会删除 returns 一个正确的迭代器。
这样做:
if(iter->second==id){
iter = ivec.erase(iter);
}
else
++iter;
还有另一个问题。
vector 有一个保留功能,可以保留 space。它不会改变大小,只会改变容量。
vector<pair<string, int> > ivec;
int main()
{
ivec.reserve(100);
}