C++ STL使用帮助
基本确定以后code interview抛弃java用c++。所以不得不面对STL以加快写代码速度。
#include <iostream>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
template<typename T>
void printContainer(T data)
{
cout<<"Print============================="<<endl;
typename T::iterator iter;
for(iter = data.begin(); iter!=data.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl<<"End-------------------------------"<<endl;
};
// 删除一个元素
template<typename T>
void deleteContainer(T data, int d)
{
typename T::iterator iter;
iter = find(data.begin(), data.end(), d);
if(iter != data.end()) data.erase(iter);
}
bool comp(const int a, const int b){ return a>b;};
void testVector()
{
vector<int> vi;
vi.assign(5, 8); // 构造vector,类似copy函数
vi.pop_back(); // 移除最后一个元素
vi.push_back(3); // 在最后添加一个元素
vi.insert(vi.begin(), 2); // 插入一个元素
swap(vi[0], vi[1]); // 交换两个元素
cout<<"Capacity: "<<vi.capacity()<<endl; //返回能容纳元素数量
cout<<"At: "<<vi.at(2)<<" "<<vi[1]<<endl; // 访问指定位置元素
cout<<"Front: "<<vi.front()<<endl; // 返回第一个位置元素
cout<<"Back: "<<vi.back()<<endl; // 返回最后一个位置元素
cout<<"Empty: "<<boolalpha<<vi.empty()<<endl; // 容器是否为空
cout<<"Size: "<<vi.size()<<endl; // 容器中元素数量
sort(vi.begin(), vi.end()); // vector排序
// 正序遍历在删除时自动后移,反序遍历删除没问题。
// for(vector<int>::iteratoriter = vi.end()-1; iter>= vi.begin();iter--)
vi.clear(); //清除所有元素
};
void testList()
{
list<int> li;
li.assign(5, 8); // 构造vector,类似copy函数
li.pop_back(); // 移除最后一个元素
li.push_back(3); // 在最后添加一个元素
li.pop_front();
li.push_front(9);
li.insert(++li.begin(), 2); // 插入一个元素
cout<<"Front: "<<li.front()<<endl; // 返回第一个位置元素
cout<<"Back: "<<li.back()<<endl; // 返回最后一个位置元素
cout<<"Empty: "<<boolalpha<<li.empty()<<endl; // 容器是否为空
cout<<"Size: "<<li.size()<<endl; // 容器中元素数量
list<int> li2;
swap(li2, li); // 交换两个list
li.splice(li.end(), li2, li2.begin()); // 指定的部分插入到list中
li.splice(li.end(), li2); // 全部插入list中
li.splice(li.end(), li2, li2.begin(), li2.end()); // 源list中元素将清除
li.merge(li2); // 合并,源list中将清除元素
li.unique(); // 删除重复元素
li.sort(); // 元素排序
li.clear(); //清除所有元素
};
void testStack()
{
stack<int> si;
si.push(8); // 压栈
si.push(2);
si.pop(); // 退栈
cout<<"Size: "<<si.size()<<endl;
cout<<"Top: "<<si.top()<<endl;
};
void testQueue()
{
queue<int> qi;
qi.push(8); // 末尾加入元素
qi.push(2);
cout<<"Front: "<<qi.front()<<endl;
cout<<"Back: "<<qi.back()<<endl;
qi.pop(); // 退栈
cout<<"Size: "<<qi.size()<<endl;
qi.empty(); // 清空栈
};
void testSet()
{
set<int> si;
si.insert(4); // 插入元素
si.insert(3); // 插入元素
si.insert(1); // 插入元素
si.insert(si.begin(), 2); // 指定位置插入元素
cout<<"Size: "<<si.size()<<endl;
cout<<"Empty: "<<boolalpha<<si.empty()<<endl;
cout<<"Count: "<<si.count(3)<<endl; // 返回在set中数目,1或0
cout<<"Find: "<<*si.find(3)<<endl; // 查找在set中位置
pair<set<int>::const_iterator,set<int>::const_iterator> ret;
ret = si.equal_range(3); // return the bounds of a range
cout<<"Lower bound: "<<*ret.first<<endl;
cout<<"Upper bound: "<<*ret.second<<endl;
si.erase(si.lower_bound(3), si.upper_bound(4)); //upper_bound与lower_bound
set<int> si2;
si.swap(si2);
si.insert(si2.begin(), si2.end());
set<int>::iterator iter;
for(iter = si.begin(); iter!=si.end(); )
{
if(*iter == 2)
si.erase(iter++); // increase iterator before delete
else
iter++ ;
}
si.clear();
};
void testMap()
{
map<int, string> mi;
mi[3] = "3";
mi.insert(pair<int, string>(4, "4")); // 插入需要pair的形式
mi.insert(pair<int, string>(2, "2"));
mi.insert(pair<int, string>(5, "5"));
cout<<"Size: "<<mi.size()<<endl;
cout<<"Count: "<<mi.count(3)<<endl;
cout<<"At: "<<mi[3]<<endl;
mi.erase(mi.lower_bound(4), mi.upper_bound(4));
map<int, string>::iterator it = mi.find(3);
mi.erase(it);
map<int, string> mi2;
swap(mi, mi2); // 交换两个set
cout<<"Print============================="<<endl;
for(it = mi.begin(); it != mi.end(); it++)
{
cout<<it->first<<": "<<it->second<<endl;
}
cout<<"End-------------------------------"<<endl;
mi.clear();
};
int main()
{
//testVector();
//testList();
//testStack();
//testQueue();
//testSet();
testMap();
system("pause");
};
#include <iostream>
#include <vector>
#include <list>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
template<typename T>
void printContainer(T data)
{
cout<<"Print============================="<<endl;
typename T::iterator iter;
for(iter = data.begin(); iter!=data.end(); iter++)
{
cout<<*iter<<" ";
}
cout<<endl<<"End-------------------------------"<<endl;
};
// 删除一个元素
template<typename T>
void deleteContainer(T data, int d)
{
typename T::iterator iter;
iter = find(data.begin(), data.end(), d);
if(iter != data.end()) data.erase(iter);
}
bool comp(const int a, const int b){ return a>b;};
void testVector()
{
vector<int> vi;
vi.assign(5, 8); // 构造vector,类似copy函数
vi.pop_back(); // 移除最后一个元素
vi.push_back(3); // 在最后添加一个元素
vi.insert(vi.begin(), 2); // 插入一个元素
swap(vi[0], vi[1]); // 交换两个元素
cout<<"Capacity: "<<vi.capacity()<<endl; //返回能容纳元素数量
cout<<"At: "<<vi.at(2)<<" "<<vi[1]<<endl; // 访问指定位置元素
cout<<"Front: "<<vi.front()<<endl; // 返回第一个位置元素
cout<<"Back: "<<vi.back()<<endl; // 返回最后一个位置元素
cout<<"Empty: "<<boolalpha<<vi.empty()<<endl; // 容器是否为空
cout<<"Size: "<<vi.size()<<endl; // 容器中元素数量
sort(vi.begin(), vi.end()); // vector排序
// 正序遍历在删除时自动后移,反序遍历删除没问题。
// for(vector<int>::iteratoriter = vi.end()-1; iter>= vi.begin();iter--)
vi.clear(); //清除所有元素
};
void testList()
{
list<int> li;
li.assign(5, 8); // 构造vector,类似copy函数
li.pop_back(); // 移除最后一个元素
li.push_back(3); // 在最后添加一个元素
li.pop_front();
li.push_front(9);
li.insert(++li.begin(), 2); // 插入一个元素
cout<<"Front: "<<li.front()<<endl; // 返回第一个位置元素
cout<<"Back: "<<li.back()<<endl; // 返回最后一个位置元素
cout<<"Empty: "<<boolalpha<<li.empty()<<endl; // 容器是否为空
cout<<"Size: "<<li.size()<<endl; // 容器中元素数量
list<int> li2;
swap(li2, li); // 交换两个list
li.splice(li.end(), li2, li2.begin()); // 指定的部分插入到list中
li.splice(li.end(), li2); // 全部插入list中
li.splice(li.end(), li2, li2.begin(), li2.end()); // 源list中元素将清除
li.merge(li2); // 合并,源list中将清除元素
li.unique(); // 删除重复元素
li.sort(); // 元素排序
li.clear(); //清除所有元素
};
void testStack()
{
stack<int> si;
si.push(8); // 压栈
si.push(2);
si.pop(); // 退栈
cout<<"Size: "<<si.size()<<endl;
cout<<"Top: "<<si.top()<<endl;
};
void testQueue()
{
queue<int> qi;
qi.push(8); // 末尾加入元素
qi.push(2);
cout<<"Front: "<<qi.front()<<endl;
cout<<"Back: "<<qi.back()<<endl;
qi.pop(); // 退栈
cout<<"Size: "<<qi.size()<<endl;
qi.empty(); // 清空栈
};
void testSet()
{
set<int> si;
si.insert(4); // 插入元素
si.insert(3); // 插入元素
si.insert(1); // 插入元素
si.insert(si.begin(), 2); // 指定位置插入元素
cout<<"Size: "<<si.size()<<endl;
cout<<"Empty: "<<boolalpha<<si.empty()<<endl;
cout<<"Count: "<<si.count(3)<<endl; // 返回在set中数目,1或0
cout<<"Find: "<<*si.find(3)<<endl; // 查找在set中位置
pair<set<int>::const_iterator,set<int>::const_iterator> ret;
ret = si.equal_range(3); // return the bounds of a range
cout<<"Lower bound: "<<*ret.first<<endl;
cout<<"Upper bound: "<<*ret.second<<endl;
si.erase(si.lower_bound(3), si.upper_bound(4)); //upper_bound与lower_bound
set<int> si2;
si.swap(si2);
si.insert(si2.begin(), si2.end());
set<int>::iterator iter;
for(iter = si.begin(); iter!=si.end(); )
{
if(*iter == 2)
si.erase(iter++); // increase iterator before delete
else
iter++ ;
}
si.clear();
};
void testMap()
{
map<int, string> mi;
mi[3] = "3";
mi.insert(pair<int, string>(4, "4")); // 插入需要pair的形式
mi.insert(pair<int, string>(2, "2"));
mi.insert(pair<int, string>(5, "5"));
cout<<"Size: "<<mi.size()<<endl;
cout<<"Count: "<<mi.count(3)<<endl;
cout<<"At: "<<mi[3]<<endl;
mi.erase(mi.lower_bound(4), mi.upper_bound(4));
map<int, string>::iterator it = mi.find(3);
mi.erase(it);
map<int, string> mi2;
swap(mi, mi2); // 交换两个set
cout<<"Print============================="<<endl;
for(it = mi.begin(); it != mi.end(); it++)
{
cout<<it->first<<": "<<it->second<<endl;
}
cout<<"End-------------------------------"<<endl;
mi.clear();
};
int main()
{
//testVector();
//testList();
//testStack();
//testQueue();
//testSet();
testMap();
system("pause");
};