【STL基础】vector
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的更多相关文章
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
- 带你深入理解STL之Vector容器
C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...
- C++STL之Vector向量详解,用法和例子 一起学习 一起加油
C++ STL之vector用法总结 1 ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- STL基础--迭代器和算法
1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; ...
- C++-STL:vector用法总结
目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...
- 从零开始写STL—容器—vector
从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...
- 【C++】STL,vector容器操作
C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...
- STL之vector常用函数笔记
STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...
随机推荐
- 问题:Custom tool error: Failed to generate code for the service reference 'AppVot;结果:添加Service Reference, 无法为服务生成代码错误的解决办法
添加Service Reference, 无法为服务生成代码错误的解决办法 我的解决方案是Silverlight+WCF的应用,Done Cretiria定义了需要在做完Service端的代码后首先运 ...
- js-tree坑
今天遇到一个js坑,一个页面,有两棵树,用同一个套参数初始化的,,,,当选择完另一个棵树之后,再操作另一颗树,不选择树节点,就会有错误出现,,,
- java 中的三种引用,强引用,软引用,弱引用
StrongReference 前引用,不会被系统GC回收,系统宁愿跑出OOM异常也不会回收强引用 SoftReference 软引用,在系统内存不足的时候,会被GC回收 WeakReferen ...
- 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
原文出自:http://www.blogjava.net/pengpenglin/archive/2010/02/22/313669.html 在很多论坛.网上经常有网友问" 为什么我使用 ...
- Apollo问题
1.安装问题: 一不小心安装了NVIDIA,导致bash docker/scripts/dev_start.sh无法启动:[ERROR] Failed to start docker containe ...
- STM32 C++编程 001 工程模板
将 STM32的官方工程模板 修改为我们这套教材的:STM32 C++工程模板 我使用的 STM32 库的版本 : V3.5.0 注意: 想学习本套 STM32 C++编程 的专栏是有点门槛的.你需要 ...
- 孕妇的孕周和体重对胎儿游离DNA在母体cfDNA占比的影响
有一篇文件,研究了孕妇的孕周和体重对 胎儿游离DNA在母体cfDNA中占比的影响 文章名称:Gestational age and maternal weight effects on fetal c ...
- 547D Mike and Fish
传送门 分析 见正睿10.3笔记 代码 #include<iostream> #include<cstdio> #include<cstring> #include ...
- loj2436 糖果
传送门 分析 我们知道对于一个不等式a<b可以将其转化为a+1<=b的形式,在知道这个之后我们便可以将5个关系进行差分约束了,具体的建边方式见代码.注意由于每个人都必须有糖,我们把每个人的 ...
- virtualbox复制虚拟机网络问题
virtulbox复制虚拟机由于mac地址问题会导致网卡不可以用 1:修改mac地址 需要在virtualbox修改虚拟机网络选项卡下面的mac地址 2:修改ifcfg-eth0 把HWADDR的值设 ...