zoukankan      html  css  js  c++  java
  • STL---vector

    #include<iostream>
    #include<vector>
    using namespace std;
    
    struct STU
    {
        int a;
    };
    int main()
    {
        vector<int> vec1; //vector 中的结构可以是C  C++所有的基础类型
        vector<char> vec2; //这样相当于一个简化版的string类型
        vector<STU> vec3;  //也可以是自定义结构
    
        
                           
        //构造函数
        vector<int> vec4(5);
        for (int i = 0; i < 5; i++)
        {
            cout << vec4[i] << endl;//都是0
        }
        cout << "*************************************************
    ";
        vector<int> vec5(5, 9);//用5个9来初始化这个vector
        for (int i = 0; i < 5; i++)
        {
            cout << vec5[i] << endl;
        }
        cout << "*************************************************
    ";
        vector<int> vec6(vec5);//用另一个vector来进行初始化
        for (int i = 0; i < 5; i++)
        {
            cout << vec6[i] << endl;
        }
        cout << "*************************************************
    ";
        vector<int>::iterator ite1 = vec6.begin();
        vector<int>::iterator ite2 = vec6.end();
        vector<int> vec7(ite1, ite2); //用迭代器进行初始化
        for (int i = 0; i < 5; i++)
        {
            cout << vec7[i] << endl;
        }
        cout << "*************************************************
    ";
        return 0;
    }
    View Code
    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main()
    {
        //Visual Studio2005定义对象的时候初始化几个,那么容量就是几,不同的编译器可能不一样
        vector<int> vec1;
        cout <<"vec1的容量:"<< vec1.capacity() << endl;
        vector<int> vec2(5);
        cout << "vec2的容量:" << vec2.capacity() << endl;
    
        //容量不够时增加现有容量的一半。比如现有10个,新的就是15个,现有13个;增加13/2==6个,就是19个,不同的编译器可能导致结果不一样
        vector<int> vec3(10);
        vec3.push_back(9);
        cout << "vec3的容量:" << vec3.capacity() << endl;
        vector<int> vec4(13);
        vec4.push_back(9);
        cout << "vec4的容量:" << vec4.capacity() << endl;
        cout << "*******************************************************8
    ";
    
        vector<int> vec5(5);
        vec5[3] = 9;
        cout <<"vec5改变前的容量:"<< vec5.capacity() << endl;
        vec5.reserve(10);
        cout << "vec5改变后的容量:" << vec5.capacity() << endl;
        //cout << vec5[5] << endl;  //这条语句是错误的因为,vec5里面现在只有5个元素
        //reserve() 方法可以改变vector的容量,但是不能改变vector里面元素的个数
        cout <<"vec5内的元素的个数(使用resize前):"<< vec5.size() << endl;
        vec5.resize(10); //这个方法可以改变vector数组的元素个数
        cout << "vec5内的元素的个数(使用resize后):" << vec5.size();
        //这个里面需要注意不要混淆capacity和size的含义
        cout << endl;
        cout << "*******************************************************8
    ";
        
        //empty方法,size不为0就返回1,size为0就返回0
        vector<int> vec6;
        cout << vec6.empty() << endl;
        vector<int> vec7(5);
        cout << vec7.empty() << endl;
    
    
        return 0;
    }
    View Code
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<functional>
    using namespace std;
    
    void func(int n)
    {
        cout << n << " ";
    }
    
    int main()
    {
        vector<int> vec1;
        for (int i = 0; i < 10; i++)
        {
            vec1.push_back(i);
        }
        cout << vec1.at(0) << endl;//at的用法
        cout << vec1[1] << endl; //at和[]都是下标运算
        cout << vec1.back() << endl;//返回最后一个元素
    
        //使用迭代器进行循环遍历
        vector<int>::iterator ite = vec1.begin();
        for (; ite != vec1.end(); ite++)
        {
            cout << *ite << " ";
        }
        cout << endl;
    
        //使用for_each进行循环遍历
        for_each(vec1.begin(), vec1.end(), func);
        cout << endl;
    
    
        //添加元素
        vec1.push_back(10); //尾部添加
        vec1.insert(vec1.begin()+2, 999); //中间插入元素
        vector<int> vec2(5, 888);
        vec1.insert(vec1.begin(), vec2.begin(), vec2.begin() + 3); //用另一个vector的进行插入
        for_each(vec1.begin(), vec1.end(), func);
        cout << endl;
    
        //删除元素
        vec1.pop_back();  //删除尾部元素
        for_each(vec1.begin(), vec1.end(), func);
        cout << endl;
        vec1.erase(vec1.begin());  //使用erase方法删除一个指定元素
        for_each(vec1.begin(), vec1.end(), func);
        cout << endl;
        vec1.erase(vec1.begin(), vec1.begin() + 2);  //使用erase方法删除一段指定元素
        for_each(vec1.begin(), vec1.end(), func);  
        cout << endl;
    
    
        //交换
        cout << "交换前的vec1:";
        for_each(vec1.begin(), vec1.end(), func);
        cout << endl;
        cout << "交换前的vec2:";
        for_each(vec2.begin(), vec2.end(), func);
        cout << endl;
        vec2.swap(vec1);
        cout << "交换后的vec1:";
        for_each(vec1.begin(), vec1.end(), func);
        cout << endl;
        cout << "交换后的vec2:";
        for_each(vec2.begin(), vec2.end(), func);
        cout << endl;
    
    
        //运算符的重载
        cout << (vec1 > vec2) << endl; //比较的方法和字符串的比较是一样的,用的少,了解一下就好了
    
    
        //排序算法
        sort(vec2.begin(), vec2.end()); //也可以改变迭代器使得只是排序中间的一部份  默认从小到大排序
        for_each(vec2.begin(), vec2.end(), func);
        cout << endl;
        sort(vec2.begin()+2, vec2.end(),greater<int>()); //加入第三个反函数参数就可以使得从小到大排序
        for_each(vec2.begin(), vec2.end(), func);
        cout << endl;
        return 0;
    }
    View Code
    #include<iostream>
    #include<vector>
    #include<ctime>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        vector<int> vec1(5, 1);
        vector<int> vec2(6, 2);
    
        vec1.assign(vec2.begin()+1, vec2.end());  //首先清空原来的所有元素,然后重新进行赋值
        vec1.assign(9, 9);   //assign的另一种使用方法
        vec1.clear();  //清空整个vector
    
    
        //打乱vector中的顺序
        vector<int> vec3;
        for (int i = 0; i < 10; i++)
        {
            vec3.push_back(i);
        }
    
        srand(unsigned int(time(0)));  //设置时间种子
        random_shuffle(vec3.begin(), vec3.end()); //乱序算法
    
        for (int i = 0; i < vec3.size(); i++)
        {
            cout << vec3[i] << " ";
        }
        cout << endl;
    }
    View Code
  • 相关阅读:
    python获取指定日期和转换的整理
    调用baidu地图API,实现语音导航播报
    Quartus 调试笔记
    mybatis-plus学习遇到的坑
    X509Certificate
    Hyperledger Fabric学习笔记——Wallet
    [WCF权限控制]从两个重要的概念谈起:Identity与Principal
    9-HyperLedger-Fabric原理-MSP详解(一)-MSP基础
    区块链中的“双花”问题
    区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述
  • 原文地址:https://www.cnblogs.com/luojianyi/p/9671660.html
Copyright © 2011-2022 走看看