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"); 
};

目录
相关文章
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
108 10
|
13天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
35 4
|
15天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
37 5
|
15天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
25 2
|
20天前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
40 0
|
2月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
55 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
74 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
67 1
|
2月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
65 6
|
2月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
67 7