vector基本用法大总结

3 篇文章 0 订阅

vector的构造函数

//
// Created by whist on 2020/4/11.
//vector的构造函数
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>&v){//打印函数
    vector<int>::iterator it;
    for(it=v.begin();it!=v.end();it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}
int main(){
    //默认无参构造
    vector<int>v1;
    for(int i=0;i<10;i++){
        v1.push_back(i);
    }
    printVector(v1);

    //通过区间方式进行构造
    vector<int>v2(v1.begin(),v1.end());//区间复制构造
    printVector(v2);

    //n个elem方式构造
    vector<int>v3(10,100);//10个数,其值为100
    printVector(v3);

    //拷贝构造
    vector<int>v4(v3);
    printVector(v4);
}

vector的赋值操作

//
// Created by whist on 2020/4/11.
//vector的赋值操作
#include <iostream>
#include <vector>
using namespace std;

void printVector(vector<int>&v){//打印函数
    vector<int>::iterator it;
    for(it=v.begin();it!=v.end();it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

void test1(){
    vector<int>v1;
    for(int i=0;i<10;i++){
        v1.push_back(i);
    }
    printVector(v1);

    //赋值
    vector<int>v2;
    v2=v1;
    printVector(v2);

    /*和构造函数很像  非构造通过assign来赋值*/
    //assign赋值
    vector<int>v3;
    v3.assign(v1.begin(),v1.end());
    printVector(v3);

    //n个elem赋值
    vector<int>v4;
    v4.assign(10,100);
    printVector(v4);
}

int main(){
    test1();
}

vector容量和大小

在这里插入图片描述
代码:

//
// Created by whist on 2020/4/11.
//vector容量和大小
/**
 * ·判断是否为空:empty
 * ·返回元素个数:size
 * ·返回容器容量:capacity
 * ·重新指定大小:resize
 */
#include <iostream>
#include <vector>
using namespace std;

void printVector(vector<int>&v){//打印函数
    vector<int>::iterator it;
    for(it=v.begin();it!=v.end();it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

void test01(){
    vector<int>v1;
    for(int i=0;i<10;i++){
        v1.push_back(i);
    }
    printVector(v1);

    /*判断容器是否为空*/
    if(v1.empty()){//为真即为空
        cout<<"v1为空"<<endl;
    }else{
        cout<<"v1不为空"<<endl;
        cout<<"v1的容量为"<<v1.capacity()<<endl;//容量一定>=.size()
        cout<<"v1的大小为"<<v1.size()<<endl;
    }

    /*重新指定大小resize()*/
//    v1.resize(15);                    //默认用0填充后面的数字
    v1.resize(15,100);   //填充值为100
    printVector(v1);
    v1.resize(10);          //如果重新指定比原来断,超出部分被删除
    printVector(v1);

}
int main(){
    test01();
}

插入与删除

在这里插入图片描述代码:

//
// Created by whist on 2020/4/11.
//
#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<<" ";
    }
    cout<<endl;
}
void test01(){
    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);
    /*尾删*/
    v1.pop_back();
    printVector(v1);

    /**下面操作需要迭代器*/
    //插入
    v1.insert(v1.begin(),100);      //第一个参数是迭代器
    v1.insert(v1.begin(),2,1000);//重载版本:插入2个1000
    vector<int>::iterator it=v1.begin();
    v1.insert(it+2,200);    //在第几个元素后面插入就+几
    printVector(v1);
    //删除
    v1.erase(v1.begin());
    v1.erase(v1.begin(),v1.end());      //重载版本:区间删除
    printVector(v1);
}

int main(){
    test01();
}

数据存取

//
// Created by whist on 2020/4/11.
//数据存取
#include<iostream>
#include <vector>
using namespace std;

void test01(){
    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;
}
int main(){
    test01();
}

互换容器

//
// Created by whist on 2020/4/11.
//互换容器
#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<<" ";
    }
    cout<<endl;
}

int test01(){
    vector<int>v1,v2;
    cout<<"交换前"<<endl;
    for(int i=0;i<10;i++){
        v1.push_back(i);
    }
    printVector(v1);
    for(int i=10;i>0;i--){
        v2.push_back(i);
    }
    printVector(v2);
    
    cout<<"交换后"<<endl;
    v1.swap(v2);
    printVector(v1);
    printVector(v2);

}
/*巧用swap可以收缩内存空间*/
void test02(){
    vector<int>v;
    for(int i=0;i<100000;i++){
        v.push_back(i);
    }
    cout<<"v的容量"<<v.capacity()<<endl;
    cout<<"v的大小"<<v.size()<<endl;

    v.resize(3);//重新指定大小
    cout<<"v的容量"<<v.capacity()<<endl;
    cout<<"v的大小"<<v.size()<<endl;

    //巧用swap收缩内存
    vector<int>(v).swap(v);
    /**
     * vector<int>(v)叫匿名对象,按v的元素来初始化匿名对象即
     *  (v)里面有v的元素,容量为3
     *  (v).swap就是把(v)容器和v交换,v容量变成3
     *  匿名对象执行完任务被编译器自动清理掉
     */
    cout<<"v的容量"<<v.capacity()<<endl;
    cout<<"v的大小"<<v.size()<<endl;
}
int main(){
//    test01();
    test02();
}

vector预留空间

在这里插入图片描述代码:

//
// Created by whist on 2020/4/11.
//vector预留空间
#include <iostream>
#include <vector>
using namespace std;
void test01(){
    vector<int>v;
    int num=0;//统计开辟的次数
    int *p=NULL;
    for(int i=0;i<100000;i++){
        v.push_back(i);
        if(p!=&v[0]){
            p=&v[0];
            num++;
        }
    }
    cout<<num<<endl;//18
};

void test02(){
    vector<int>v;
    //利用reserve预留空间
    v.reserve(100000);
    int num=0;//统计开辟的次数
    int *p=NULL;
    for(int i=0;i<100000;i++){
        v.push_back(i);
        if(p!=&v[0]){
            p=&v[0];
            num++;
        }
    }
    cout<<num<<endl;//1
};

int main(){
    test01();
    test02();
}


for_each

//
// Created by whist on 2020/4/17.
//
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void myPrint(int val){
    cout<<val<<endl;
}
int main(){
    vector<int>v(4,5);
    v.at(1)=1;
    v.at(2)=2;
    v.at(3)=3;
    //用STL提供的算法遍历vector
    //迭代器是算法和容器的粘合剂 有算法一定有迭代器
    for_each(v.begin(),v.end(),myPrint);
}

vector存放自定义数据类型

//
// Created by whist on 2020/4/17.
//vector存放自定义数据类型
#include <iostream>
#include <vector>
using namespace std;
class Person{
public:
    Person(string name,int age){
        this->name=name;
        this->age=age;
    }
    string name;
    int age;
};

int main(){
    /**
     * 存放自定义数据类型
     */
    vector<Person>v;
    Person p1("aaa",10);
    Person p2("bbb",20);
    Person p3("ccc",30);
    Person p4("ddd",40);
    Person p5("eee",50);
    //向容器中插入数据
    v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);
    v.push_back(p5);
    //遍历容器数据
    for(vector<Person>::iterator it=v.begin();it!=v.end();it++){
        cout<<"姓名"<<(*it).name;
        cout<<"年龄"<<it->age<<endl;//指针可以用->
    }
    /**
     * 存放自定义数据类型的指针
     */
    vector<Person*>v1;
//    p1("aaa",10);
//    p2("bbb",20);
//    p3("ccc",30);
//    p4("ddd",40);
//    p5("eee",50);
    //向容器中插入数据
    v1.push_back(&p1);
    v1.push_back(&p2);
    v1.push_back(&p3);
    v1.push_back(&p4);
    v1.push_back(&p5);
    //遍历容器
    for(vector<Person*>::iterator it=v1.begin();it!=v1.end();it++){
        cout<<"姓名"<<(*it)->name;
        cout<<"年龄"<<(*it)->age<<endl;
    }
}

嵌套的vector

//
// Created by whist on 2020/4/17.
// 嵌套的vector
#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<vector<int>>v;//嵌套的vector
    //创建小容器
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;
    vector<int>v4;
    //小容器中添加数据
    for(int i=0;i<4;i++){
        v1.push_back(i+1);
        v2.push_back(i+2);
        v3.push_back(i+3);
        v4.push_back(i+4);
    }
    //小容器插入到大容器中
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    v.push_back(v4);
    //大容器遍历
    for(vector<vector<int>>::iterator it=v.begin();it!=v.end();it++){
        for(vector<int>::iterator vit=(*it).begin();vit!=(*it).end();vit++){
            cout<<*vit<<" ";
        }
        cout<<endl;
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值