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. 10-08C#基础--进制转换

    (一).数制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径.节省设备等优点,为了便于描述,又常用八.十六进制作为二进制的缩写.一般计数都采用进位计数,其特点 ...

  2. Python之list的创建以及使用

    list是一种有序的集合,可以随意添加和删除里面的元素. 空的list的定义:L = [] list当中的元素用[]概括起来. 在list当中可以使用索引来进行访问: 在这里我们要注意我们在进行索引的 ...

  3. css知多少(5)——选择器(转)

    css知多少(5)——选择器   1. 引言 从本节开始,就进入本系列的第二个部分——css和html的结合——说白了就是选择器. CSS中定义了样式,如何将这些样式设置到相应的html节点上?就不得 ...

  4. css知多少(3)——样式来源与层叠规则(转)

    css知多少(3)——样式来源与层叠规则   上一节<css知多少(2)——学习css的思路>有几个人留言表示思路很好.继续期待,而且收到了9个赞,我还是比较欣慰的.没看过的朋友建议先去看 ...

  5. 【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度

    postion:absolute 跳出文本流,不是行内元素,设置宽高有效,我的理解. 引用下曹刘阳写的<编写高质量代码-web前端开发修炼之道>一书中看到的一句话:position:abs ...

  6. 前端学习笔记2017.6.21-html是个什么东西

    html有两种意思,html语言和html格式 html语言是一种面向人类的计算机语言,这是啥意思?人类用html这种语言描述出一个网页的样子,浏览器解析这个语言并展示出来. html格式是一种文件格 ...

  7. ZROI2018提高day1t2

    传送门 分析 考场上看错了第一个条件,于是觉得是个简单贪心,随便取了每一个点的最大收益然后算了一下,就得了40pts...看来读对题很重要呀qwq.实际的正解是这样的:我们将每一个i与f[i]连一条边 ...

  8. Linux下性能监控工具介绍

    本章解释如何使用适用于Linux的大量性能工具及每个工具中信息的意义.即使已经使用top或者sar,也可能从本章学到相关知识. 应该养成使用这些工具的习惯.当然要知道如何诊断性能问题,但也应该定期寻找 ...

  9. 开启wifi后不能ping通本机 Cann't ping the local PC while start a wlan

    问题如题:今天发现一个问题,测试本机ip时候有时候总是获取失败,后来才发现是wifi共享软件导致的缘故. 本来呢?我买的是小米wifi,但是小米wifi对应的客户端不是很好用,动不动就启动失败,不要问 ...

  10. Understanding the Effective Receptive Field in Deep Convolutional Neural Networks

    Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解深度卷积神经网络中的有效感受野 ...