C++STL中vector(可变大小数组)用法总结

来源:互联网 发布:日本电视台网络直播 编辑:程序博客网 时间:2024/05/20 20:48

    标准库类型vector表示某种类型对象的集合,集合中每个对象都有一个与之对应的索引,用以访问对象。要想使用vector,必须包含头文件vector,并且需要声明using std::vector

/*--------------------创建和初始化vector对象--------------------*//*创建一个包含T类型元素的空vector*/vector<T> v1;/*用v1来创建v2,v2包含v1中所有元素的拷贝*/vector<T> v2(v1);/*等价于vector<T> v2(v1);*/vector<T> v2 = v1;/*v3包含n个T类型的元素,每个元素的值都是val*/vector<T> v3(n, val);/*v4包含n个执行值初始化的元素*/vector<T> v4(n);/*利用初始值列表构造vector,每个元素被赋予相应的初始值*/vector<T> v5{a, b, c...};/*等价于v5{a, b, c...}*/vector<T> v5 = {a, b, c...};/*---------------------------迭代器---------------------------*//*返回指向vec的第一个元素和最后一个元素之后的迭代器*/vec.begin(), vec.end();/*返回指向vec的第一个元素和最后一个元素之后的const迭代器(只能读元素,不能写元素)*/vec.cbegin(), vec.cend();/*返回指向vec的最后一个元素和第一个元素之前的迭代器*/vec.rbegin(), vec.rend();/*返回指向vec的最后一个元素和第一个元素之前的const迭代器*/vec.crbegin(), vec.crend(); /*--------------------------容量相关--------------------------*//*vec中元素的数目*/vec.size();/*vec可以保存的最大元素数量*/vec.max_size();/*vec为空,返回true;否则返回false*/vec.empty();/*在不重新分配空间的情况下,vec可以保存多少元素*/vec.capacity();/*分配至少能容纳n个元素的内存空间*/vec.reserve(n);/*请求将capacity()减少为和size()一样的大小,但是调用该函数也不保证一定会退回内存空间*/vec.shrink_to_fit();/*--------------------------交换和赋值--------------------------*//*交换vec1和vec2中的元素。vec1和vec2必须具有相同的类型*/swap(vec1, vec2);/*同swap(vec1, vec2)。注意swap并未对任何元素进行拷贝、插入或删除操作,它只交换两个vector内部数据结构*/vec1.swap(vec2);/*将vec中的元素替换为迭代器b和e所表示范围内的元素。迭代器b和e不能指向vec中的元素*/vec.assign(b, e);/*将vec中的元素替换为初始化列表il中的元素*/vec.assign(il);/*将vec中的元素替换为n个值为t的元素*/vec.assign(n, t);/*注意赋值相关的运算会导致指向左边容器内部的迭代器、引用和指针失效。*//*---------------------------添加元素---------------------------*//*在vec的尾部添加一个值为t的元素,返回void*/vec.push_back(t);/*在vec的尾部添加一个由args创建的元素*/vec.emplace_back(args);/*在迭代器p指向的元素之前添加一个值为t的元素,返回指向新添加的元素的迭代器*/vec.insert(p, t);/*在迭代器p指向的元素之前添加一个由args创建的元素,返回指向新添加元素的迭代器*/vec.emplace(p, args);/*在迭代器p指向的元素之前添加n个值为t的元素。返回指向新添加的第一个元素的迭代器;若n为0,则返回p*/vec.insert(p, n, t);/*将迭代器b和e指定范围内的元素插入到迭代器p指向的元素之前,b和e不能指向vec中的元素。返回指向新添加的元素的迭代器;若范围为空,返回p*/vec.insert(p, b, e);/*il是一个花括号包围的初始值列表,将初始值列表里的值插入到迭代器p指向的元素之前。返回指向新添加的元素的迭代器;若列表为空,返回p*/vec.insert(p, il);/*---------------------------访问元素---------------------------*//*返回vec中最后一个元素的引用。如果vec为空,则属于未定义行为*/vec.back();/*返回vec中第一个元素的引用。如果vec为空,则属于未定义行为*/vec.front();/*返回vec中下标为n的元素的引用,n是一个无符号整数。如果下标越界,则属于未定义行为*/vec[n];/*返回vec中下标为n的元素的引用。如果下标越界,则抛出out_of_range异常*/vec.at(n);/*---------------------------删除元素---------------------------*//*删除vec中的最后一个元素,返回void。若vec为空,则函数行为未定义。*/vec.pop_back();/*删除迭代器p所指向的元素,返回指向被删除元素之后元素的迭代器;若p指向最后一个元素,则返回尾后迭代器;若p是尾后迭代器,则函数行为未定义。*/vec.erase(p);/*删除迭代器b和e范围内的元素,返回指向最后一个被删除元素之后元素的迭代器;若e本身就是尾后迭代器,则函数也返回尾后迭代器。*/vec.erase(b, e);/*删除vec中所有的元素,返回void*/vec.clear();
原创粉丝点击