STL容器常用操作

vector

1.定义和初始化

vector<int> vec1;    //默认初始化,vec1为空
vector<int> vec2(vec1);  //使用vec1初始化vec2
vector<int> vec3(vec1.begin(), vec1.end());//使用vec1初始化vec2
vector<int> vec4(10);    //10个值为0的元素
vector<int> vec5(10, 4);  //10个值为4的元素

2.常用操作方法

vec1.push_back(100);           //尾部添加元素
vec1.size();         //元素个数
vec1.empty();    //判断是否为空
vec1[0];        //取得第一个元素
vec1.insert(vec1.end(),5,3);    //从vec1.back位置插入5个值为3的元素
vec1.pop_back();              //删除末尾元素
vec1.earse(vec1.begin(),vec1.begin()+2);//删除vec1[0]-vec1[2]之间的元素,不包括vec1[2]其他元素前移
vec1==vec2;  //判断是否相等==、!=、>=、<=...
vector<int>::iterator it=vec1.begin();    //获取迭代器首地址
vector<int>::const_iterator c_it=vec1.begin();   //获取const类型迭代器
vec1.clear();              //清空元素

3.遍历

  • 下标法
int len=vec1.size();
for(int i=0;i<len;i++){
    cout<<vec1[i];
}
  • 迭代器
auto it=vec1.begin();
for(;it!=vec1.end();it++){
    cout<<*it;
}

按第二列排序

bool cmp(vector<int> a,vector<int> b){          //先按第二列排
    if(a[1]!=b[1]) return a[1]>b[1];
    if(a[0]!=b[0]) return a[0]>b[0];
    if(a[2]!=b[2]) return a[2]>b[2];
}
vector<vector<int> > data;
...
sort(data.begin(),data.end(),cmp);

vector实现不同类型排列

struct point{
    int x;
    string str;
};
bool cmp(point a,point b){              //按string排列
    if(a.str!=b.str) return a.str>b.str;
    else 
    return a.x>b.x;
}
int main(){
    vector<point> data;
    point x={1,"23"};
    point y={2,"12"};
    point z={3,"20"};
    data.push_back(x);
    data.push_back(y);
    data.push_back(z);
    sort(data.begin(),data.end(),cmp);
    for(int i=0;i<3;i++){
        cout<<data[i].x<<" "<<data[i].str;
        cout<<endl;
    }
}

map

自动按key值排序
1.定义和初始化

map<int,string> map1;
map<int,map<int, string> > map2;

2.常用操作方法

map1[1]="zk";                //添加元素
map1.insert(map<int, string>::value_type(2, "Diyabi"));//插入元素
map1.insert(pair<int,string>(1,"Siqinsini"));
map1.insert(make_pair<int, string>(4, "V5"));
//插入元素
string str=map1[1];                 //根据key取得value,key不能修改
map<int,string>::iterator it=map1.begin();//取得迭代器首地址
int key=it->first;            //根据迭代器取得key
string str=it->second;      //根据迭代器取得value
map1.erase(it);                //删除迭代器数据
map1.erase(1);                       //根据key删除value
map1.size();                     //元素个数
map1.empty();                      //判断空
map1.clear();                     //清空所有元素

//3.遍历
for (map<int, string>::iterator iter = map1.begin(); iter != map1.end(); iter++)
{
    int keyk = iter->first;
    string valuev = iter->second;
}

set

集合里没有重复的元素

set<int> eg;
eg.insert(1);
//遍历set,可以发现元素是有序的
set<int>::iterator set_iter = eg1.begin();
for (; set_iter != eg1.end(); set_iter++) 
    cout << *set_iter << " ";
//使用size()函数可以获得当前元素个数
eg1.size();
//find()函数可以查找元素是否存在
if (eg1.find(200) == eg1.end())
    cout << "200 isn't in the set eg1" << endl;
//获得两个set的并
     set<int> eg3;
     cout << "Union(两个set的并集):";
     set_union(eg1.begin(),
         eg1.end(),
         eg2.begin(),
         eg2.end(),
         insert_iterator<set<int> >(eg3, eg3.begin())
         );//注意第五个参数的形式
     copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));
     cout << endl;
 //获得两个set的交,注意进行集合操作之前接收结果的set要调用clear()函数清空一下
     eg3.clear();
     set_intersection(eg1.begin(),             //头文件<algorithm>
         eg1.end(),
         eg2.begin(),
         eg2.end(),
         insert_iterator<set<int> >(eg3, eg3.begin())
         );
     cout << "Intersection:";
     copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));头文件<iterator>
     cout << endl;

     //获得两个set的差
     eg3.clear();
     set_difference(eg1.begin(),
         eg1.end(), eg2.begin(),
         eg2.end(),
         insert_iterator<set<int> >(eg3, eg3.begin())
         );
     cout << "Difference:";
     copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));
     cout << endl;

     //获得两个set的对称差,也就是假设两个集合分别为A和B那么对称差为AUB-A∩B
     eg3.clear();
     set_symmetric_difference(eg1.begin(), eg1.end(), eg2.begin(), eg2.end(), insert_iterator<set<int> >(eg3, eg3.begin()));
     copy(eg3.begin(), eg3.end(), ostream_iterator<int>(cout, " "));
     cout << endl;

     return 0;
 }

queue

queue<int> q1;
queue<double> q2;

queue 的基本操作有:

入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

char[]

char st[100];

  1. 字符串长度
    strlen(st);

  2. 字符串比较
    strcmp(st1,st2);
    strncmp(st1,st2,n); 把st1,st2的前n个进行比较。

  3. 附加
    strcat(st1,st2);
    strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加’\0’。

  4. 替换
    strcpy(st1,st2);
    strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加’\0’。

  5. 查找
    where = strchr(st,ch) ch为要找的字符。
    where = strspn(st1,st2); 查找字符串。
    where = strstr(st1,st2);

    string

    string str;

  6. 字符串长度
    len = str.length();
    len = str.size();

  7. 字符串比较
    可以直接比较
    也可以:
    str1.compare(str2);
    str1.compare(pos1,len1,str2,pos2,len2); 值为负,0 ,正。
    nops 长度到完。

  8. 附加
    str1 += str2;

    str1.append(str2);
    str1.append(str2.pos2,len2);

  9. 字符串提取
    str2 = str1.substr();
    str2 = str1.substr(pos1);
    str2 = str1.substr(pos1,len1);
    string a=s.substr(0,4); //获得字符串s中 从第0位开始的长度为4的字符串

  10. 字符串搜索
    where = str1.find(str2);
    where = str1.find(str2,pos1); pos1是从str1的第几位开始。
    where = str1.rfind(str2); 从后往前搜。

  11. 插入字符串
    不是赋值语句。
    str1.insert(pos1,str2);
    str1.insert(pos1,str2,pos2,len2);
    str1.insert(pos1,numchar,char); numchar是插入次数,char是要插入的字符。

  12. 替换字符串
    str1.replace(pos1,str2);
    str1.replace(pos1,str2,pos2,len2);

  13. 删除字符串
    str.erase(pos,len)
    str.clear();

  14. 交换字符串
    swap(str1,str2);

  15. C –> C++
    char *cstr = “Hello”;
    string str1;
    cstr = cstr;
    string str2(cstr);

猜你喜欢

转载自blog.csdn.net/weixin_41127779/article/details/82534555
今日推荐