C++ STL使用帮助
2013-04-25 13:40
274 查看
基本确定以后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"); };
相关文章推荐
- C++中STL STD::list使用说明
- c++ 标准模板库 STL 算法之 for_each 函数的使用用法详解
- 如何使用C++的標準函式庫進行排序? (C/C++) (STL)
- c++STL中优先队列的使用
- C++ 中STL学习-50条有效使用经验学习笔记(一):容器
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
- c++ stl iostream 使用笔记二
- 使用STL的next_permutation函数生成全排列(C++)
- C++ 之高效使用STL(查找算法的选择)
- C++值传递、引用传递、指针传递以及STL模板堆的使用
- c++中STL的使用总结
- C++ STL--stack/queue 的使用方法
- C++ STL之map的使用方法
- C++ 学习 6 STL容器使用
- 【转载】【bitset】C++ STL bitset 使用总结
- C++ STL bitset的使用
- C++的STL中集合(set)的使用说明
- C++ STL--stack/queue 的使用方法
- C++ STL使用,以及注意事项
- C++STL中全排列函数next_permutation的使用