vector

构造函数:

//default:
vector<T> v; //空的vector //fill:
vector<T> v(n); //n个元素的vector,元素默认初始化
vector<T> v(n, value); //n个元素值为value的vector //range:
vector<T> v(first, last); //两个迭代器之间的元素构成的vector
vector<T> v(arr, arr + sizeof(arr) / sizeof(T)); //由内置数组构造的vector //copy:
vector<T> v(const vector<T> &u); //v是u的拷贝 //move:
vector<T> v(vector<T> &&x); //x是右值引用(只能引用右值,如vector<int> &&x = {1,2,3};) //initializer list:
vector<T> v{value1, value2...};

赋值与swap:

v1 = v2;
v1 = {value1, value2...};
v1.swap(v2);
swap(v1, v2);

大小:

size_type v.size() const noexcept;    //元素数目
size_type v.capacity() const noexcept; //当前为该vector分配的空间可以容纳的元素数目
size_type v.max_size() const noexcept; //可容纳元素的最大数目
//max_size >= capacity >= size
bool v.empty() //是否为空
v.resize(n); //调整元素大小,使容器中含n个元素
v.resize(n, value); //调整后的vector中每个元素的值都为value
v.reserve(n); //请求改变capacity的大小,使得vector至少可以容纳n个元素
v.shrink_to_fit(); //请求退还多余内存,但标准库不保证完全退还(C++11)

获取元素:

v[i] = value;
v.at(i) = value;
v.front() = value; //第一个元素
v.back() = value; //最后一个元素
T *p = v.data(); //p为指向v中第一个元素的指针(C++11)

修改:

//assign
v.assign(n, value); //将v置为n个值为value的元素
v.assign(first, last); //用t的两个迭代器之间的值为v赋值,左闭右开 t可以是vector、array、list、forward_list、deque、set、unordered_set、multiset、unordered_multiset等。 vector元素的顺序和重复性由传入的容器类型性质决定
v.assign(begin(t), end(t)); //与上条语句类似,除上述类型,还支持内置数组类型
v.assign(arr, arr + n); //将数组中的一部分赋给v
v.assign({value1, value2...}); //列表 v.push_back(value); //尾部插入一个元素
v.pop_back(); //删除最后一个元素 //insert
v.insert(it, value); //迭代器指向的位置插入值为value的元素
v.insert(it, n, value); //迭代器指向的位置插入n个值为value的元素
v.insert(it, first, last); //迭代器it指向的位置插入另一个容器的两个迭代器之间的元素
v.insert(it, x); //x是T的右值引用 T&&
v.insert(it, {value1, value2...}); //列表
//以上函数返回一个指向新插入的第一个元素的迭代器 //emplace(C++11)
v.emplace(it, args); //以args为参数,调用T的构造函数构造一个对象插入it所指的位置
v.emplace_back(args); //将构造的T对象插入vector的尾部
//以上函数返回一个指向新插入的元素的迭代器 //insert vs emplace:
//insert传对象或引用,emplace传参数调用构造函数
struct Foo
{
Foo(int n, double x);
};
std::vector<Foo> v;
v.emplace(someIterator, , 3.1416);
v.insert(someIterator, Foo(, 3.1416)); //erase
v.erase(it); //删除it指向的元素
v.erase(first, last); //删除范围内的元素
//以上函数返回一个迭代器,指向被删除的最后一个元素之后的元素 v.clear(); //删除所有元素

获取迭代器:

v.begin(), v.end();    //首元素位置,尾后位置
v.cbegin(), v.cend(); //const_iterator //reverse_iterator 按逆序寻址
//const_reverse_iterator
v.rbegin(), v.rend();
v.crbegin(), v.crend(); begin(v), end(v);

以上带c的版本是C++11引入的, 用以支持auto。

vector<bool>特有的函数:

void flip() noexcept;    //所有元素取反
static void swap (ref1, ref2) noexcept; //除通用的swap,还有一个静态swsap函数,用于交换ref1和ref2对应的位.

【STL基础】vector的更多相关文章

  1. C++的STL中vector内存分配方法的简单探索

    STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio ...

  2. 带你深入理解STL之Vector容器

    C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...

  3. C++STL之Vector向量详解,用法和例子 一起学习 一起加油

                                                                                    C++ STL之vector用法总结 1 ...

  4. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

  5. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  6. STL基础--迭代器和算法

    1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; ...

  7. C++-STL:vector用法总结

    目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...

  8. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  9. 【C++】STL,vector容器操作

    C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...

  10. STL之vector常用函数笔记

    STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...

随机推荐

  1. 问题:oracle long 与 clob;结果:long类型比clob到底差在什么地方?

    long类型比clob到底差在什经常看到9i以上的文档,说以后 clob会逐步取代long,一直想不出, 而我在8.1.7上也测试2个字段好像 在存储上也看不出什么区别?么地方? 差别还是很大的, 比 ...

  2. 关于play!的attachments.path配置、以及关于Form表单上传请求的认识

    相关链接 form表单提交multipart/form-data的请求分析:http://blog.csdn.net/five3/article/details/7181521.http://blog ...

  3. 使用Aspectj 的配置文件方式进行aop操作

  4. 关联映射、关联查询【重点掌握一条SQL语句的那种方法】

    1 什么叫关联映射 通过数据库对象之间的关联关系(一对一.一对多.多对多),反映到实体对象上之间的引用. 举例 用户实体类(User):user_id user_name user_token 笔记本 ...

  5. git安装、git和GitHub的配合使用、git和码云的配合使用

    1 git安装请参见廖雪松的git教程前面几节 点击前往 2 git速成之基本命令 点击前往 3 git 和 GitHub 配合使用之基础 点击前往 4 git 和 GitHub 配合使用之进阶 点击 ...

  6. js 控制标记样式

    做一个变色的标签 鼠标移入变为灰色,移除变回原来的颜色,点击变成黑色,再点击变回,如果变成黑色不受移入移除影响. <body> <div class="bt1" ...

  7. linux安装thrift

    安装配置Thrift Thrift的编译器使用C++编写的,在安装编译器之前,首先应该保证操作系统基本环境支持C++的编译,安装相关依赖的软件包,如下所示 sudo yum install autom ...

  8. python3-打印一个进度条

    # Auther: Aaron Fan import sys,time for i in range(30): #打印一个#号,这种方法打印不会自动换行 sys.stdout.write('#') # ...

  9. 多线程学习-基础(五)sleep()和yield()的区别(理论)

    一.sleep()和yield()的区别 (1)sleep()使当前线程进入停滞状态(即阻塞状态),所以执行sleep()的线程在指定的时间内不会被执行: (2)yield()只是使当前线程从运行状态 ...

  10. 模仿添加QQ好友桌面快捷方式

    /** * * @param context * @param tname 桌面快捷方式的名字 * @param icon 好友头像 */ public static void addShortCut ...