鱼C论坛

 找回密码
 立即注册
查看: 1263|回复: 0

[技术交流] C++旅程第12站——vector

[复制链接]
发表于 2020-6-15 22:14:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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[i] << " ";
        } 
        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[0])
                {
                        p = &v1[0];
                        num++;
                }
        }
        cout << "num : " << num << endl;
}

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 07:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表