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. 关于SQL结构化查询语言中(+)的用法

    一.概述 (+):从符号上理解为添加一些内容进入结果集中,那么自然会问到这么几个问题 1.添加什么内容 2.怎么添加 3.添加到什么结果集中 以下内容将以实例说明上面3个问题. 二.实例 以Oracl ...

  2. 类型:sqlserver;问题:版本;结果:sqlserver版本区分

    LocalDB (SqlLocalDB)LocalDB 是 Express 的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少的特点.如果您需要 ...

  3. DAY14-前端之Bootstrap框架

    Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.JavaScript的前端框架. 它是为实现快速开发Web应用程序而设计的一套前端工具包. 它支持响应式布局,并且 ...

  4. MySQL建立一个连接工具类

    public class DBUtil { public static Connection getConn() { Connection conn = null; try { Class.forNa ...

  5. 【总结整理】高德LBS开放平台学习

    高德LBS开放平台地址    http://lbs.amap.com/api/javascript-api/guide/create-map/mapstye 概述->示例中心Demo体验-> ...

  6. a标签中href=""的几种用法(转)

    a标签中href=""的几种用法   标签: html / a标签 / javascript 46371 众所周知,a标签的最重要功能是实现超链接和锚点.而且,大多数人认为a标签最 ...

  7. css实现三角形(转)

    css实现三角形 (2012-09-10 14:17:26) 标签: css 三角形 杂谈 分类: 网页制作 css实现三角形的原理是:当元素的宽高为0,边框(border)不为0时,四个角边框交界重 ...

  8. Angular22 HttpClient的使用

    1 HttpClient介绍 HttpClient时Http的演进,注意:Http在@angular/http中,而HttpClient在@angular/common/http中: 使用前需要在模块 ...

  9. 网络笔记-unity 实现AOP

    该文章来自网络,如有冒犯,请及时联系! 前提 引用以下文件 Microsoft.Practices.ObjectBuilder2.dll Microsoft.Practices.Unity.dll M ...

  10. 多线程学习-基础(一)Thread和Runnable实现多线程

    很久没记录一些技术学习过程了,这周周五的时候偶尔打开“博客园”,忽然让我产生一种重拾记录学习过程的想法,记录下学习研究过程的一点一滴,我相信,慢慢地就进步了!最近想学习一下多线程高并发,但是多线程在实 ...