zoukankan      html  css  js  c++  java
  • STL容器之vector容器API(一)

    ector容器  单端数组(只有一个开口)、动态数组(动态扩展空间)

    • 构造、赋值、
    • 大小 size 重置大小 resize 容量 capacity
    • 是否为空 empty 交换 swap
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    #include <vector>
    /*
    vector构造函数
    vector<T> v; //采用模板实现类实现,默认构造函数
    vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。
    vector(n, elem);//构造函数将n个elem拷贝给本身。
    vector(const vector &vec);//拷贝构造函数。
    
    //例子 使用第二个构造函数 我们可以...
    int arr[] = {2,3,4,1,9};
    vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
    
    vector常用赋值操作
    assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
    assign(n, elem);//将n个elem拷贝赋值给本身。
    vector& operator=(const vector  &vec);//重载等号操作符
    swap(vec);// 将vec与本身的元素互换。
    
    vector大小操作
    size();//返回容器中元素的个数
    empty();//判断容器是否为空
    resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
    resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长>度的元素被删除。
    capacity();//容器的容量
    reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。
    
    */
    
    void printVector(vector<int>& v)
    {
        for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
    }
    void test01()
    {
        //一、构造函数
        vector<int> v;      //vector<T> v; 默认构造
    
        int arr[] = { 2,3,4,1,9 };
        vector<int> v1(arr, arr + sizeof(arr) / sizeof(int)); //第二个构造函数
        printVector(v1);
        vector<int> v2(v1.begin(), v1.end());   //vector(v.begin(), v.end());
        printVector(v2);
    
        vector<int> v3(10, 100);        //vector(n, elem);  即10个100
        printVector(v3);
    
        vector<int> v4(v3);             //vector(const vector &vec); 拷贝构造
        printVector(v4);
    
        //二、赋值使用
        vector<int> v5;
        v5.assign(v4.begin(), v4.end());    //assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
        printVector(v5);
        
        //元素互换
        v5.swap(v2);        //swap(vec);// 将vec与本身的元素互换。 
        printVector(v5);     //2,3,4,1,9
        //三、大小操作
        cout << v5.size() << endl;      //5 元素互换 大小也会同时互换
        if (v5.empty())
        {
            cout << "v5为空" << endl;
        }
        else {
            cout << "v5不空" << endl;
        }
        //resize(长度,[填充]) 重新指定长度
        v5.resize(10, 2);   //2,3,4,1,9,2,2,2,2,2
        printVector(v5);     //2,3,4,1,9
        v5.resize(3);       //2,3,4
        printVector(v5);     //2,3,4,1,9
    }
    
    int main()
    {
        test01();
        system("Pause");
        return 0;
    }

    结果:

    预留空间

    void test02()
    {
        //每次扩充都会更换内存地址
        vector<int>v;
        int* p = NULL;
        int num = 0;
        for (int i = 0; i < 100000; i++)
        {
            v.push_back(i);
            if (p != &v[0])
            {
                p = &v[0];      //每次开辟空间都会重置p的地址
                num++;          //开辟一次空间 num加1
                cout << "P=" << p << endl;
                cout << "v=" << &v[0] << endl;  
            }
        }
        cout << "num = " << num << endl;
    
        //如果预先留够位置 则不会多次更换
        vector<int> v2;
        v2.reserve(100000);
        int* p2 = NULL;
        int num2 = 0;
        for (int i = 0; i < 100000; i++)
        {
            v2.push_back(i);
            if (p2 != &v2[0])
            {
                p2 = &v2[0];      //每次开辟空间都会重置p的地址
                num2++;          //开辟一次空间 num加1
                cout << "P2=" << p << endl;
                cout << "v2=" << &v[0] << endl;
            }
        }
        cout << "num2= "<< num2 << endl;
    }

    结果:

  • 相关阅读:
    C# 从类库中获取资源图片,把图片资源保存到类库中
    C# Bitmap/png转成jpg格式,压缩图片
    C# 窗体间传值(使用委托与自定义事件)
    C# Image与Base64编码互转函数
    简单Tomcat HTTP RPC框架
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    Java序列化机制和原理
    攻破JAVA NIO技术壁垒
    代理模式(Proxy)
    Java序列化与反序列化
  • 原文地址:https://www.cnblogs.com/yifengs/p/15189665.html
Copyright © 2011-2022 走看看