这是她 发表于 2020-6-15 22:14:57

C++旅程第12站——vector

A dream that you donnot fight for can haunt you for the rest of your life.
                                                                         Vector
vector可以动态扩展(并不是在原空间之后续接新空间,而是找到更大的内存空间,然后将原数据拷贝到新空间,释放原空间)
vector容器的迭代器是支持随机访问的迭代器
#include<iostream>
#include<vector>

using namespace std;

void printvector(vector<int>&v)
{
        for (vector<int>::iterator it = v.begin();it != v.end(); it++)
        {
                cout << *it << " ";
        }
}

void test1()
{
       
        vector<int>v1;//默认构造无参构造
       
        for (int i = 0; i < 10; i++)
        {
                v1.push_back(i);
        }
       
        printvector(v1);
        cout << endl;
       
        //通过区间方式进行构造
        vector<int>v2(v1.begin(),v1.end());
        printvector(v2);
       
        cout << endl;
       
        //n个elem方式构造
        vector<int>v3(10,100);
        printvector(v3);
       
        cout << endl;
       
        //拷贝构造
        vector<int>v4(v3);
        printvector(v4);
       
        cout << endl;
       
}

void test2()
{
        vector<int>v1;
       
        for (int i = 0 ; i < 10;i++)
        {
                v1.push_back(i);
        }
       
        //赋值 operator=
        vector<int>v2;
        v2 = v1;
        printvector(v2);
        cout << endl;
       
        //assign
        vector<int>v3;
        v3.assign(v1.begin(),v1.end());
        printvector(v3);
        cout << endl;
       
        //n个elem方式赋值
        vector<int>v4;
        v4.assign(10,100);
        printvector(v4);
        cout << endl;
}

void test3()
{
        vector<int>v1;
        for (int i = 0; i<10; i++)
        {
                v1.push_back(i);
        }
       
        if(v1.empty())
        {
                cout << "v1为空" << endl;
        }
        else
        {
                cout << "v1不为空" << endl;
                cout << "v1的容量为:" << v1.capacity() << endl;
                cout << "v1的大小为: " << v1.size() << endl;
        }
       
        //重新指定大小
        v1.resize(15,100);//利用重载版本,可以指定默认填充值,参数15->个数 100->值
        printvector(v1);//如果重新指定的比原来的长,默认用0填充新的位置
        cout << endl;
       
        v1.resize(3);
        printvector(v1);//如果重新指定的比原来的短,超出的部分删除掉
        cout << endl;
}

void test4()
{
        vector<int>v1;//尾插
        v1.push_back(10);
        v1.push_back(20);
        v1.push_back(30);
        v1.push_back(40);
        v1.push_back(50);
        printvector(v1);
        cout << endl;
       
        //尾删
        v1.pop_back();
        printvector(v1);
        cout << endl;
       
        //插入
        v1.insert(v1.begin(),2,1000);
        printvector(v1);
        cout << endl;
       
        //删除参数也是迭代器
        v1.erase(v1.begin());
        printvector(v1);
        cout << endl;
       
        //清空
        v1.erase(v1.begin(),v1.end());
        v1.clear();
        printvector(v1);
        cout << endl;
}

void test5()
{
        vector<int>v1;
        for(int i = 0;i < 10 ;i++)
        {
                v1.push_back(i);
        }
       
        //利用[]方式访问数组中的元素
        for (int i = 0;i < v1.size(); i++)
        {
                cout << v1 << " ";
        }
        cout << endl;
       
        //利用at方式访问元素
        for(int i = 0;i < v1.size(); i++)
        {
                cout << v1.at(i) << " ";
        }
        cout << endl;
       
        //获取第一个元素
        cout << "第一个元素为:" << v1.front() << endl;
       
        //获取最后一个元素
        cout << "最后一个元素为: " << v1.back() << endl;
}

void test6()
{
        vector<int>v1;
        for(int i = 0;i < 10 ;i++)
        {
                v1.push_back(i);
        }
        printvector(v1);
        cout << endl;
       
        vector<int>v2;
        for(int i = 10;i > 0;i--)
        {
                v2.push_back(i);
        }
        printvector(v2);
        cout << endl;
       
        //交换
        cout << "交换后!!!!!!!!!!" << endl;
        v1.swap(v2);
        printvector(v1);
        cout << endl;
        printvector(v2);
        cout << endl;
       
        vector<int>v3;
        for(int i = 0;i < 10000;i++)
        {
                v3.push_back(i);
        }
        cout << "v3的容量: " << v3.capacity() << endl;
        cout << "v3的大小: " << v3.size() << endl;
       
        //重新指定大小
        v3.resize(5);
        cout << "v3的容量: " << v3.capacity() << endl;
        cout << "v3的大小: " << v3.size() << endl;
       
        //使用swap收缩空间
        vector<int>(v3).swap(v3);
       
        cout << "v3的容量为: " << v3.capacity() << endl;
        cout << "v3的大小为:" << v3.size() << endl;
}

void test7()
{
        vector<int>v1;
    v1.reserve(100000);//预留空间
        int num = 0;
        int *p = NULL;
        for(int i = 0; i< 100000;i++)
        {
                v1.push_back(i);
                if(p != &v1)
                {
                        p = &v1;
                        num++;
                }
        }
        cout << "num : " << num << endl;
}

int main()
{
        test1();//vector构造函数
       
        test2();//vector赋值操作
       
        test3();//vector容量和大小
       
        test4();//vector插入和删除
       
        test5();//vector数据存取
       
        test6();//vector互换
       
        test7();//vector预留空间
       
        return 0;
}
                                                                            噜啦啦{:10_320:}

页: [1]
查看完整版本: C++旅程第12站——vector