1. 遍历函数 (顺序容器共用)。
template<typename T>
void Display(T x)
{
for (auto it=x.begin(); it != x.end(); ++it)
cout << *it << " ";
cout << endl;
}
2. vector的用法。
void UseOfVector(void)
{
int a[] = {8, 3, 7, 9, 4, 0, 7, 4, 1, 5};
// -------------------初始化-------------------
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的元素
vector<string> vec6(10,"null"); //10个值为null的元素
vector<string> vec7(10,"hello"); //10个值为hello的元素
vector<int> v8(a, a+10);
Display<vector<int> >(v8);
// ---------------------遍历--------------------
for (int ii=0; ii != v8.size(); ++ii)
cout << v8[ii] << " ";
cout << endl;
for (auto it=v8.begin(); it != v8.end(); ++it)
cout << *it << " ";
cout << endl;
// --------------------操作-------------------
v8.push_back(15); // 添加
Display<vector<int> >(v8);
bool ret = v8.empty(); // 判断是否为空
v8.insert(v8.end(), 5, 3); // 插入,从v8.end()开始,插入5个值为3的元素
Display<vector<int> >(v8);
v8.pop_back(); // 删除末尾元素
Display<vector<int> >(v8);
v8.erase(v8.end()-4, v8.end()); // 删除迭代器之间的元素
Display<vector<int> >(v8);
v8.clear(); // 清空容器
Display<vector<int> >(v8);
}
3. string的用法。
void UseOfString(void)
{
char a[] = {'y', 'w'};
// -------------------------初始化--------------------------------
string s1, s5, s6, s7; //默认构造函数,s1为空串
string s2(s1); //将s2初始化为s1的一个副本
string s3("Hello"); //将s3初始化一个字符串面值副本
string s4(10,'c'); // 将s4 初始化为字符'c'的n个副本
/*cin>>s5; //读取有效字符到遇到空格
getline(cin,s6); //读取字符到遇到换行,空格可读入,知道‘\n’结束
getline(cin,s7,'a'); //一个直到‘a’结束,其中任何字符包括'\n'都能够读入
Display<string> (s7);*/
// ------------------------操作--------------------------
bool ret = s4.empty();
int size = s4.size();
int len = s4.length();
cout << ret << " " << size<< " " << len << endl;
auto it = s4.begin();
s4.insert(0, "yw"); //把字符串s插入到pos之前的位置
Display<string> (s4);
s4.insert(0, a, 2); //下标pos之前插入a数组的前len个元素。
Display<string> (s4);
reverse(s4.begin(), s4.end()); // 翻转
Display<string> (s4);
auto pos = s4.find("yw" ) ; // 发现第一次出现yw的位置,并返回其下标值
cout << pos << endl;
string tmp = s4.substr(pos, 2); // 截取s串中从pos开始的长为len的子串
cout << tmp <<endl;
Display<string> (s4);
s4.erase(pos, 2); // 删除pos后长为len的元素,默认删除所有元素。
Display<string> (s4);
}
4. string与int的相互转换。
// ------------int转string-------------
stringstream streamIntToStr;
string s;
int a = 123456;
streamIntToStr << a;
streamIntToStr >> s;
// ----------string转int--------------
stringstream streamStrToInt;
string s("123456");
int a ;
streamStrToInt << s;
streamStrToInt >> a;
// ------带逗号的字符串转数组----------
string s1;
getline(cin, s1);
vector<int> v;
stringstream input(s1);
string tmp;
while (getline(input, tmp, ','))
{
if ( ! tmp.empty())
v.push_back(stoi(tmp));
}
5. list的用法。
void UseOfList(void)
{
int a[] = {8, 3, 7, 9, 4, 0, 7, 4, 1, 5};
// ---------------------初始化----------------------
list<int> lst1; //创建空list
list<int> lst2(3); //创建含有三个元素的list
list<int> lst3(3,2); //创建含有三个元素的值为2的list
list<int> lst4(lst2); //使用lst2初始化lst4
list<int> lst5(lst2.begin(),lst2.end()); // 使用迭代器初始化
list<int> lst6(a, a+10); // 使用数组初始化
Display<list<int> > (lst6);
// --------------------遍历只能使用迭代器---------------------
for (auto it=lst6.begin(); it != lst6.end(); ++it)
cout << *it << " ";
cout << endl;
// -----------------------操作------------------------
bool ret = lst6.empty(); // 判断是否为空
int len = lst6.size(); // 确定大小
lst6.push_back(15); // 后面添加
Display<list<int> > (lst6);
lst6.pop_back(); // 删除末尾元素
Display<list<int> > (lst6);
lst6.insert(lst6.begin(), 5, 3); // 插入
Display<list<int> > (lst6);
lst6.remove(4); // 删除值为4的节点
Display<list<int> > (lst6);
lst6.reverse(); // 翻转
Display<list<int> > (lst6);
lst6.sort(); // 排序
Display<list<int> > (lst6);
lst6.unique(); // 删除相邻重复元素
Display<list<int> > (lst6);
lst6.clear(); // 清空
Display<list<int> > (lst6);
}
6. map的用法。
template<typename T, typename U>
void DisplayMap(map<T, U> m1)
{
for (auto it=m1.begin(); it != m1.end(); ++it)
{
cout << "("<<it->first << ", ";
cout << it->second << ") " << endl;
}
cout << endl;
}
template<typename T, typename U>
bool CmpByValue(const pair<T, U> &m1, const pair<T, U> &m2) // 二元谓词
{
return m1.second < m2.second;
}
void UseOfMap(void)
{
// ----------创建------------
map<int, string> m1;
// -------------添加------------------
m1.insert(pair<int, string>(1, "clx")); // map的结果默认是按照key来进行排序的。
m1.insert(pair<int, string>(2, "hx"));
m1.insert(map<int, string>::value_type(6, "lj"));
m1.insert(map<int, string>::value_type(3, "yw"));
m1.insert(make_pair(4, "ppp"));
m1.insert(make_pair(5, "xp"));
m1[7] = "312";
m1[8] = "326";
// ---------------遍历-----------------
DisplayMap<int, string> (m1);
// ---------------删除---------------
m1.erase(7); // 删除关键字为k的元素
DisplayMap<int, string> (m1);
auto it = m1.begin();
int size = m1.size();
while (--size)
++it;
cout << it->second << " "<<size << endl;
m1.erase(it); // 使用迭代器来进行删除
DisplayMap<int, string> (m1);
// ----------------------获取map的最后一个元素-------------------
auto it2 = m1.end();
--it2;
cout << it2->second << endl;
// ----------------将map按照value来进行排序-----------------
vector<pair<int, string> > v1(m1.begin(), m1.end()); // 将map中的元素转存到vector中。
sort(v1.begin(), v1.end(), CmpByValue<int, string>); // 传递自己定义的谓词版本。
for (int ii=0; ii<v1.size(); ++ii)
{
cout << "(" << v1[ii].first << ", " << v1[ii].second << ")"<< endl;
}
}
输出结果: