【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<<" ";是基于范围的 ...
随机推荐
- DAY10-MYSQL表操作
一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 http://www.cnblogs.com/guoyunlong666/p/8491702.html 二 表介绍 表 ...
- DAY7-面向对象之多态与多态性
一.多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abs ...
- LaTex: 表格单元格内容 分行显示/换行
问题:如何同时让表格同一行一个单元格的文字能垂直居中?比如说文字超长超出页面范围需要分行显示 答:(来源于smth) 方案一: \newcommand{\tabincell}[2]{\begin{ta ...
- redis的特性
- 每天一道算法题(12)——和为n的连续正数序列或者随机数
题目:输入一个正数n,输出所有和为n 连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5.4-6 和7-8. 1.思路 尊崇以下策略: (1)对 ...
- 跨域Ajax原理以及浏览器同源策略
- JS对表单的操作
JS对表单中的style的操作,包括复选框技术 废话不多说直接上文件代码!!! 功能:全选\反选,鼠标监测变颜色 <html> <head> <meta charset= ...
- 100851K King’s Inspection
传送门 题目大意 给你一张图,求这张图的汉密尔顿回路. 分析 因为m≤n+20,所以如果存在回路一定是在一个环中加入了至多20条边.我们先考虑dfs,但我们发现如果出现图1这种情况就会是复杂度爆炸 图 ...
- Luogu U15118 萨塔尼亚的期末考试(fail)
感觉...昨天是真的傻... 题意 T个询问,每个询问给一个n,求 $ \frac{\sum_{n}^{i = 1}Fib_{i} * i}{n * (n + 1) / 2} $ Fib是斐波那契数列 ...
- wordCount总结
1.github地址:https://github.com/husterSyy/SoftTest 2.PSP表格 psp 2.1 psp阶段 预估耗时(分钟) 实际耗时(分钟) Planning ...