C++容器常见函数操作


#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    /*--------------------- vector容器的一些操作  ------------------*/
    vector vect1;            // 定义一个vector容器
    vect1.push_back(1);            // push_back: 向容器的末尾添加元素
    vect1.push_back(2);
    vect1.push_back(3);
    vect1.pop_back();            // pop_back: 去除末尾的元素
    vect1.insert(vect1.begin() + 1, 8);    // 在某个位置插入一个元素,效率低,不适合大批操作
    vect1.at(0);                        // at:取某个位置的元素
    vect1.capacity();                    // capacity: 不分配新的内存空间的前提下它最多能保存多少元素。这个和下面的size 是有区别的!!
    vect1.size();                        // size: 已经保存的元素的数目
    vect1.empty();                        // empty:判断容器是否为空
    vect1.front();                        // front:取第一个元素
    vect1.back();                        // back:取最后一个元素
    vect1.erase(vect1.begin() + 1);        // erase:删除指定位置的元素
    vector vect2;
    vect2.assign(vect1.begin(), vect1.end()); // 赋值操作
    /*------------------------------------------------------------*
    // 其他容器操作都和vector差不多,以下列举一些其他容器特有的操作
    /*--------------------- string容器一些操作  --------------------*/
    string str1 = "Hello Ace";            // string的几种构造方法
    string str2("Hello World");        
    string str3(str1, 6);                // 从str1下标6开始构造, str3 -> Ace
    string str4 = str2.substr(0, 5);    // 求子串: str4 -> Hello
    string str5 = str2.substr(6);        // 求子串: str5 -> World
    string str6 = str2.substr(6, 11);    // 求子串: str6 -> World
    // string str7 = str2.substr(12);    // 抛异常: out_of_range
    string str8 = str2.replace(6, 5, "Game");    // 替换:str8 -> Hello Game 从位置6开始,删除5个字符,并替换成"Game"
    string str9 = str2.append(", Hello Beauty");// 追加字符串: str9 -> Hello World, Hello Beauty
    auto pos1 = str1.find("Ace");                // 查找字符串    : pos1 -> 6 ,返回第一次出现字符串的位置,如果没找着,则返回npos
   int res = str1.compare("Hello, Ace");        // 比较字符串: res -> -1, 根据str1是等于、大于还是小于参数指定的字符串, 返回0、整数或者负数
    string str10 = "Pi = 3.14159";
    double pi = stod(str10.substr(str10.find_first_of("+-.0123456789")));    // 数值转换: pi -> 3.14159
    /*------------------------------------------------------------*/
    /*--------------------- deque容器一些操作  --------------------*/
    deque d1;
    d1.push_back(1);                            // 尾后压入元素
    d1.push_back(2);
    d1.push_back(3);
    d1.push_front(4);                            // 队头压入元素
    d1.push_front(5);
    d1.push_front(6);
    d1.pop_back();                                // 尾后弹出一个元素
    d1.pop_front();                                // 队头弹出一个元素
    d1.front();                                    // 取队头元素
    d1.back();                                    // 取队尾元素
    /*------------------------------------------------------------*/
    /*--------------------- list容器一些操作  --------------------*/
    list l;
    l.push_back(1);                                // 尾后压入元素
    l.push_back(2);
    l.push_back(3);
    l.push_front(4);                            // 队头压入元素
    l.push_front(5);
    l.push_front(6);
    l.pop_back();                                // 尾后弹出一个元素
    l.pop_front();                                // 队头弹出一个元素
    l.front();                                    // 取队头元素
    l.back();                                    // 取队尾元素
    l.insert(l.begin(), 88);                    // 某个位置插入元素(性能好)
    l.remove(2);                                // 删除某个元素(和所给值相同的都删除)
    l.reverse();                                // 倒置所有元素
    l.erase(--l.end());                            // 删除某个位置的元素(性能好)
    /*------------------------------------------------------------*/
    /*--------------------- forward_list容器一些操作  --------------*/
    forward_list fl = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    fl.push_front(0);                // 压入元素,该容器没有push_back方法
    auto prev = fl.before_begin();    // 表示fl的"首前元素"
    auto curr = fl.begin();            // 表示fl的第一个元素
    // 循环遍历
    while (curr != fl.end())        // 表示仍有元素要处理
    {
        if (*curr % 2)                // 若元素为奇数,则删除
        {
            curr = fl.erase_after(prev);    // 删除它并移动curr
        }
        else
        {
            prev = curr;            // 移动迭代器curr,指向下一个元素,prev指向curr之前的元素
            ++curr;
        }
    }
    // 操作后: fl = {0, 2, 4, 6, 8}
    /*------------------------------------------------------------*/
    /*--------------------- array容器一些操作  --------------------*/
    array myArray1 = { 1, 2, 3, 4, 5 };    // 定义一个一维数组
    array, 3> myArray2 = {1, 2, 3, 4, 5, 6};    // 定义一个二维数组
    array myArray3 = {6, 7, 8, 9, 10};
    array myArray4;                // 此数组并未初始化
    // array.resize();        // array 不能有改变容器大小的操作,它的效率比vector高
    myArray1.swap(myArray3);// 交换两个数组的的元素
    myArray4 = myArray1;    // 支持直接这样赋值,原生的数组不可以这样。它把值全部复制过去,而不是引用
    myArray1.assign(0);        // 把myArray1的元素全部置为0
    // 遍历数组元素
    for (int i = 0; i < myArray1.size(); ++i)
    {
        cout << myArray1[i] << endl;
    }
    /*------------------------------------------------------------*/
    return 0;

}

 

你可能感兴趣的:(基础知识,C++容器)