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 << "*************************************************\n";
    vector<int> vec5(5, 9);//用5个9来初始化这个vector
    for (int i = 0; i < 5; i++)
    {
        cout << vec5[i] << endl;
    }
    cout << "*************************************************\n";
    vector<int> vec6(vec5);//用另一个vector来进行初始化
    for (int i = 0; i < 5; i++)
    {
        cout << vec6[i] << endl;
    }
    cout << "*************************************************\n";
    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 << "*************************************************\n";
    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\n";

    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\n";
    
    //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

 

posted @ 2018-09-18 21:49  清浅...忆回  阅读(95)  评论(0编辑  收藏  举报