STL 之 vector的应用
关于vector
vector是C++提供的一个容器,它是一个能够存放任意类型的动态数组,可以随时增加和压缩数据。
使用vector时需要注意以下几点:
1. 如果要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;
2. vector作为函数的参数或者返回值时,需要注意它的写法;
double Distance(vector<int>&a, vector<int>&b) 其中的“&”绝对不能少
引入头文件
#include <vector>
vector常用操作
1. 创建向量
vector<int> vec;
2. 向量尾部插入元素
vec.push_back(item);
3. 向量尾部弹出元素
vec.pop_back();
4. 访问向量元素
(1)下标访问
for(int i = ; i < vec.size(); i++) {
cout << vec[i] << endl;
}
(2)迭代器访问
vector<int>::iterator it;
for(it = vec.begin(); it != vec.end(); it++) {
cout << *it << endl;
}
5. 插入元素
vec.insert(vec.begin() + i, item); //在向量的第i+1的位置插入元素item
6. 删除元素
vec.erase(vec.begin() + i); //删除向量的第i+1个元素
今天在用vector.erase()的时候,发现总是不能把应该erase掉的东西erase干净
原因在于:每次删除一个元素后,都会跳过下一个元素,继续执行。仔细一想,才发现执行下一次for循环时i++了,所以就跳过了一个元素。因此在erase掉一个元素后,应该让 i-- 才行
7. 向量的大小
vec.size();
8. 其他
vec.front(); //返回向量的第一个元素
vec.back(); //返回向量的最后一个元素 vec.empty(); //检测向量是否为空
vec.clear(); //清空向量
vector常用算法
以下算法使用时都需要包含头文件
#include <algorithm>
1. 翻转元素
reverse(vec.begin(), vec.end()); //将向量中的元素翻转,即逆序排列
2. 排序
sort(vec.begin(), vec.end()); //将元素以升序排列(由小到大)
//定义排序比较函数
bool compare(const int &a, const int &b) {
return a > b;
}
sort(vec.begin(), vec.end(), compare); //将元素以降序排列(由大到小)
3. 查找
find(vec.begin(), vec.end(), ); //查找向量中的值为10的元素
4. 复制
copy(vec.begin(), vec.end(), vec_1.begin() + ); //把vec向量中所有元素全部复制到vec_1向量中,从vec_1.begin() + 1 的位置开始复制,覆盖掉原有的元素
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()函数 ...
- 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<<" ";是基于范围的 ...
- [转]STL中vector转数组(实际是数组的指针)
感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...
随机推荐
- Django框架知识2
1.Http消息格式: 1.请求(request): 请求方法 请求路径 HTTP/1.1\r\n k1:v1\r\n k2:v2\r\n \r\n 请求体正文 2.响应(response) HTTP ...
- ubuntu 安装 RPostgreSQL 库
其实大家在Linux 的R 中安装其他库,完全可以使用R 自带的安装方式,只是这个 RPostgreSQL 库需要用到 postgresql 的lib 库与include 头文件,所以才有若干个步骤去 ...
- PHP不重新编译,单独添加模块扩展的方法
php自身提供了很多扩展,比如curl,gmp, mbstring等.我们在编译安装php时未必安装了所有扩展.那么在安装完php后,如果想单独安装某个php自身的扩展怎么办呢? 我们以curl扩展模 ...
- C语言中位运算符异或“∧”的作用
异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧=,∧=,∧=.如: 即071∧,结果为023(八进制数). “异或”的意思是判断两个相应 ...
- XML学习1 xml序言 dtd约束
- 最短路之SPFA(单源)HDU 2066
#include "iostream" #include "cstdio" #include "queue" #include <cs ...
- (转)C#文件操作大全
转自:https://www.cnblogs.com/wangshenhe/archive/2012/05/09/2490438.html 文件与文件夹操作主要用到以下几个类: 1.File类: 提供 ...
- WCF中的AsyncPattern
WCF中的AsyncPattern (系列博文源自 http://pfelix.wordpress.com/,由笔者翻译并整理,转载请注明) 在wcf 的 service contract中, 服 ...
- Java 8新特性--Lambda表达式作为返回值
lambda表达式作为方法的返回值:
- 说说JVM原理?内存泄漏与溢出的区别?何时产生内存泄漏?
1.JVM原理 JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,所有的Java程序会首先被编译为.class的类文件,这种类文件可以 ...