C++ STL----招聘笔试常用数据结构和算法
在招聘笔试的时候常常会遇到软件类的笔试题,一般两小时4个题,这种题一般第一题是送分题,后面题就需要灵活求解,因此在笔试之前非常有必要复习下STL库的使用。
栈 stack
在C++中,使用栈需要包含其头文件,#include <stack> ,具体的栈操作如下:
stack <int> st; //申明一个int类型的栈st st.push(10); //将10压入栈中 st.pop(); //将st中顶部元素弹出(出栈) 注意:这里出栈并不会返回其值,该pop函数时无返回值的 st.top(); //返回栈顶的元素值, 注意:这里不会将其元素弹出 st.empty(); //判断栈是否为空,空:返回true 非空:返回 false st.size(); //获取栈的元素个数 st.swap();
向量 vector
在C++中,使用向量需要包含其头文件,#include <vector> ,具体的向量操作如下
vector <int> ve; //申明一个类型为int的向量 ve.push_back(10); //将10添加到向量ve的最后 ve.pop_back(); //将向量ve最后的元素弹出,即删除 最后一个元素 注意:这里不会有返回值 ve.back(); //返回向量ve最后一个元素 注意:这里不会删除最后一个元素 ve.front(); //返回向量ve第一个元素 注意:这里不会删除第一个元素 ve.at(10); //返回第10个元素的值 也可以用迭代器 ve.size(); //返回向量的大小 ve.empty(); //判断向量是否为空,空:返回true 非空:返回 false ve.begin(); //向量的开始位置 ve.end(); //向量的结束位置
图 map
在C++中,使用图需要包含其头文件,#include <map> ,具体的图操作如下:
map <int,string>mp; //申明一个map类型为int,string的键值对 mp[0]="hello"; //将mp键值为0的赋值为hello字符串 mp.insert(pair<int,string>(10,"linux"));//将键值对10,"linux"插入到键值为10的位置上 mp.at(10); //返回键值为10的元素 mp.clear(); //清空整个mp mp.begin(); //返回mp迭代器的开始位置 mp.end(); //返回mp迭代器的结束位置 mp.empty(); //判断图mp是否为空 mp.size(); //返回图mp的元素个数
字符串 string
在C++中,使用字符串需要包含其头文件,#include <string> ,具体的字符串操作如下:
string str; str="hello"; //初始化字符串 str[0]; //返回字符串str第一个字节 str.size(); //返回字符串str的长度 str.length(); //返回字符串str的长度 str.clear(); //清空字符串 str+="linux"; //追加一个字符串 str.find('a'); //查找str中是否有'a'这个字符,如果存在,返回其位置,否则,返回str.npos str.find("he",3); //查找str中是否存在he字串,从下标3开始找,如果存在,返回其位置,否则,返回str.npos str.find("he"); //查找str中是否存在he字串,从下标0开始找,如果存在,返回其位置,否则,返回str.npos str.erase(1,3); //删除str中第1个字符到第3个字符 str.insert(2,"world");//在str的第二个字符后面插入字符串world
链表 list
在C++中,使用链表需要包含其头文件,#include <list> ,具体的链表操作如下:
list<int> li; //申明一个链表 list<int> li{0,1,2}; //申明一个初始化为0,1,2的链表 li.remove(0); //移除第一个元素 li.insert(li.begin(),54); //在li开始的位置插入一个54 li.sort(); //默认从小到大排序 li.sort(less<int>()); //从小到大排序 li.sort(greater<int>()); //从大到小排序 li.size(); //返回li元素的个数
迭代器 iterator
迭代器是C++提供的一种操作元素的对象,一般用于遍历否个数据结构,部分的数据结构中有迭代器,下面给出部分例程:
/* 对向量进行遍历操作 */ vector<int>::iterator itv; itv=ve.begin(); for(int i=0;i<ve.size();i++) { cout<<*itv<<endl; itv++; } for(itv=ve.begin();itv!=ve.end();itv++) { cout<<*itv<<endl; } /* 对图进行遍历操作 */ map<int,string>::iterator itm; for(itm=mp.begin();itm!=mp.end();itm++) { cout<<itm->first<<itm->second<<endl; }
查找 find()
在很多算法题中经常会用到查找这个过程,在C++中提供了关于查找的函数,其中最常用的就是find()函数,需要包含头文件#include <algorithm>
string::size_type itfv; itfv=*find(ve.begin(),ve.end(),10);//查找是否存在10这个元素 if(itfv!=str.npos) { cout<<itfv<<endl; } else { cout<<"none"<<endl; }
在string类型中也有一个find函数,这个函数的使用比较简单,这里简单举个例子
string::size_type its; its=str.find("dkw"); if(its!=str.npos) { cout<<its<<endl; } else { cout<<"none"<<endl; }