C++中vector容器

使用C++中vector容器时必须包含

#include <vector>
using namespace std;

vector基本概念

vector:向量(动态数组),内存分配原理与string相同,是连续的空间,空间不够用时,申请一个更大的空间,迭代器失效
功能:vector数据结构和数组非常相似,也称为单端数组
vector与普通数组区别:数组是静态空间,vector可以动态扩展

vector构造函数

功能:创建vector容器
①vector<T> v;
采用模板实现类实现,默认构造函数
②vector(v.begin(),v.end());
将v[begin(),end()]区间中的元素拷贝给自身
③vector(n,elem);
构造函数将n个elem拷贝给自身
④vector(const vector &v);
拷贝构造函数
举例:

#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 test(){
    vector<int> v1;       //无参构造函数,即默认构造
    for(int i=0;i<10;i++){           //给容器v1赋值
        v1.push_back(i);             
    }
    printVector(v1);        //调用打印函数

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

    vector<int> v3(5, 20);      //构造函数将n个elem拷贝给自身
    printVector(v3); 

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

int main(){
    test();
    system("pause");
}

输出:

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
20 20 20 20 20
20 20 20 20 20

vector赋值操作

功能:给vector容器进行赋值
①vector& operator=(const vector &v);
重载=操作符
②assign(begin,end);
将[begin,end)区间中的数据拷贝赋值给本身
③assign(n,elem);
将n个elem拷贝赋值给本身
举例:

#include <iostream>
using namespace std;
#include <vector>

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

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

    //赋值
    vector<int> v2;    
    v2 = v1;                 //重载=操作符
    printVector(v2);

    vector<int> v3;
    v3.assign(v1.begin(), v1.end());    //将[begin, end)区间中的数据拷贝赋值给本身
    printVector(v3);

    vector<int> v4;
    v4.assign(5, 20);      //将n个elem拷贝赋值给本身
    printVector(v4);
}

int main() {
    test();
    system("pause");
}

输出:

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
20 20 20 20 20

vector容量和大小

功能:对vector容器的容量和大小进行操作
①empty();
判断容器是否为空,返回值为0,不为空,否则为空
②capacity();
容器的容量,初始容量:定义对象时,初始化几个容量就是几,无参就是0
Visual Studio容量不够时,增加现有容量的一半(向下取整)
VC6.0容量不够时,增加现有容量的一倍
③size();
返回容器中元素的个数
④resize(int num);
重新设置容器的长度为num,若容器变长,则以默认值(0)填充新位置;若容器变短,删除末尾超出容器长度的元素
⑤resize(int num,elem);
重新设置容器长度为num,并以elem替换默认以0填充的值
举例:

#include<iostream>
using namespace std;
#include<vector>

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

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

    cout << v1.empty() << endl;
    cout << "v1的容量为:" << v1.capacity() << endl;
    cout << "v1的大小为:" << v1.size() << endl;
    v1.resize(15);        //重新设置容器大小,变大的部分以0填充
    printVector(v1);

    vector<int> v2;
    for (int i = 0; i < 8; i++) {
        v2.push_back(i);
    }
    printVector(v2);
    v2.resize(15, 9);       //重新设置容器大小,变大的部分以9填充
    printVector(v2);

    v2.resize(10);           //重新设置容器大小,变小,删除末尾多余元素
    printVector(v2);
}

int main() {
    test();
    system("pause");
}

输出:

0 1 2 3 4 5 6 7 8 9
0                                        //返回0说明容器不为空
v1的容量为:13
v1的大小为:10
0 1 2 3 4 5 6 7 8 9 0 0 0 0 0
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 9 9 9 9 9 9 9
0 1 2 3 4 5 6 7 9 9

vector插入和删除

插入:
①push_back(i);
尾部插入元素i
②insert(const_iterator pos,i);
在迭代器指向位置pos上插入元素i
③insert(const_iterator pos,int count,i);
在迭代器指向位置pos上插入count个元素i
④insert(const_iterator pos,const_iterator first, const_iterator second);
在迭代器指向位置pos上插入另一个迭代器的从first位置到second位置的元素
删除:
⑤pop_back();
删除最后一个元素
⑥erase(const_iterator pos);
删除迭代器指向的元素
⑦erase(const_iterator start, const_iterator end);
删除迭代器指向的从start位置至end位置之间的元素
⑧clear();
删除容器中所有元素
举例:

#include <iostream>
using namespace std;
#include <vector>

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

void test() {
    vector<int> v1;
    v1.push_back(5);    //在迭代器尾部插入元素
    v1.push_back(6);
    v1.push_back(7);
    printVector(v1);

    v1.insert(v1.begin() + 2, 12);       //在迭代器指向的位置(下标为2)插入元素12
    printVector(v1);

    v1.insert(v1.begin(), 5, 8);            //在迭代器指向位置插入5个8
    printVector(v1);

    vector<int> v2(5, 1);
    v1.insert(v1.begin() + 2, v2.begin(), v2.end());     在迭代器指向位置插入迭代器v2的所有值
    printVector(v1);

    v1.pop_back();         //删除迭代器尾部元素
    printVector(v1);

    v1.erase(v1.begin());       //删除迭代器头部元素
    printVector(v1);

    v1.erase(v1.begin(), v1.begin() + 2);         //删除迭代器首部两个元素
    printVector(v1);

    v1.clear();          //清空迭代器中的元素
    printVector(v1);
}

int main() {
    test();
    system("pause");
}

输出:

5 6 7
5 6 12 7
8 8 8 8 8 5 6 12 7
8 8 1 1 1 1 1 8 8 8 5 6 12 7
8 8 1 1 1 1 1 8 8 8 5 6 12
8 1 1 1 1 1 8 8 8 5 6 12
1 1 1 1 8 8 8 5 6 12

vector数据存取

①operator[i];
返回索引i所指的数据
②at(i);
返回索引i所指的数据
③front();
返回容器中第一个数据元素
④back();
返回容器中最后一个数据元素

#include<iostream>
using namespace std;
#include<vector>

void test() {
    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;
    for (int i = 0; i < v1.size(); i++) {
        cout << v1.at(i) << " ";
    }
    cout << endl;

    cout << "v1的第一个元素:" << v1.front() << endl;
    cout << "v1的最后一个元素:" << v1.back() << endl;
}

int main() {
    test();
    system("pause");
}

输出:

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
v1的第一个元素:0
v1的最后一个元素:9

vector互换容器

功能:实现两个容器内的元素进行互换
swap(v);
将容器v中元素与当前容器中的元素进行互换

#include<iostream>
using namespace std;
#include<vector>

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

void test() {
    vector<int> v1;
    for (int i = 0; i < 10; i++) {
        v1.push_back(i);
    }
    cout << "交换前:" << endl;
    printVector(v1);

    vector<int> v2;
    for (int i = 10; i > 0; i--) {
        v2.push_back(i);
    }
    printVector(v2);

    cout << "交换后:" << endl;
    v1.swap(v2);
    printVector(v1);
    printVector(v2);
}

int main() {
    test();
    system("pause");
}

输出:

交换前:
0 1 2 3 4 5 6 7 8 9
10 9 8 7 6 5 4 3 2 1
交换后:
10 9 8 7 6 5 4 3 2 1
0 1 2 3 4 5 6 7 8 9

vector预留空间

reserve(int len);
预留len个元素长度的空间,用以减少vector在动态扩展容量时的扩展次数

vector<int> v;
v.reserve(1000);       //预留1000个元素长度的空间,不用动态扩展,可直接使用
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容