STL vector简单用法
初涉c++,此为《算法笔记》中的内容,有待个人理解完善。
vector
vector翻译为向量,叫做“变长数组”更容易理解。
头文件:#include<vector>
vector定义
vector<typename> name;
相当于name[SIZE],只不过其长度可以根据需要变化,比较节省时间。
注意:如果typename也是一个stl容器,定义时要在>>之间加上空格。
vector<int> name;
vector<vector<int> > name;//>>之间要加空格
定义vector数组的方法:
vector<typename> Arrayname[arraySize];
vector<int> vi[100];//Arrayname[0]~Arrayname[99]中每一个都是一个vector容器。
//与上一种定义的区别是,这种定义,确定了一维的大小
vector容器内元素的访问
vector一般提供两种访问:通过下标访问或通过迭代器访问。
(1)通过下标访问(和访问数组一样)
(2)通过迭代器访问
迭代器(iterator)可以理解为一种类似指针的东西,其定义为:
vector<typename>::iterator it;//这样it就是vector<typename>::iterator型的变量
vector<int>::iterator it;
vector<double>::iterator it1;
//这样就得到了迭代器it,并且可以通过*it来访问vector里的元素
vector<int> arr;
for(int=0;i<5;i++){
arr.push_back(i);//push_back(i)在arr的末尾添加新元素i,即一次添加0 1 2 3 4 5
}
可以通过类似下标和指针访问数组的 方式来访问容器内的元素:
#include<stdio.h>
#include<vector>
using namespace std;
int main(){
vector<int> arr;
vector<int> arr;
for(int=0;i<5;i++){//添加元素
arr.push_back(i);
}
//arr.begin()为取出arr的首元素地址,儿it指向这个地址
vector<int>::iterator it=vi.begin();
for(int i=0;i<5;i++){
printf("%d",*(it+i));
}//打印元素
return 0;
}
//从这里看,arr[i]和*(vi.begin()+i)是等价的
arr.end()不是最后一个元素的地址,而是指向最后一个元素的下一个元素,
只作为迭代器末尾标志,不储存任何元素。
美国人思维比较习惯左闭右开。
迭代器可以进行自增自减操作。
在常用的STL容器中,只有在vector和string中,才允许使用vi.begin()+i这种写法。
vector常用函数实例解析
(1)push_back():
在vector后面添加一个元素x,时间复杂度为O(1)
(2)pop_back()
用以删除vector的尾元素,时间复杂度O(1)
3) size()
用来后获得vector中元素的个数,时间时间复杂度为O(1)。
size()返回的是unsigned类型,不过用%d不会有问题。
(4)clear()
用来清空vector中的所有元素,时间复杂度为O(N)。
insert()
insert(it,x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度O(N)。
erase()
1删除单个元素
erase(it)即删除迭代器为it处的元素。
2删除一个区间内的所有元素
erase(first,last)即删除[first,last]内的所有元素。
#vector的常见用途
存储数据
vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间。
有些场合要求把某些数据输出在一行,数据中间用空格分开,囿于输出数据的个数是确定的,可以先用vector记录所有数据,然后一次性输出。
用邻接表储存图
使用vector实现邻接表可以让那个一些对指针不熟悉的读者有比较方便的写法。
---恢复内容结束---
STL vector简单用法的更多相关文章
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL————vector的用法
一.什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container).跟任意其它类型容器一样,它能够存放各种类型的对象.可以简单的认为,向量是一个能 ...
- C++标准模板库(STL)——vector常见用法详解
vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...
- C++STL vector简单使用练习1
#include <iostream> #include <vector> #include <numeric> using namespace std; int ...
- STL set简单用法
set的常见用法详解 set翻译为集合,是一个内部自动有序并且不含重复元素的容器. 可以用于去掉重复元素,或者元素过大,或者不能散列的情况,set只保留元素本身而不考虑它的个数. 头文件:#inclu ...
- [STL] vector基本用法
vector的数据安排以及操作方式,与array非常相似.两者的唯一区别在于空间的运用的灵活性.array是静态空间,一旦配置了就不能改变.vector是动态空间,随着元素的加入,它的内部机制会自行扩 ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- STL vector 用法介绍
介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...
随机推荐
- mysql 开发进阶篇系列 36 工具篇mysqlshow(数据库对象查看工具)
一.概述 mysqlshow客户端查找工具,能很快地查找存在哪些数据库,数据库中的表,表中的列或索引,和mysql客户端工具很类似,不过有些特性是mysql客户端工具所不具备的. mysqlshow的 ...
- Runtime 自动化归档
Runtime的使用 (id)initWithCoder:(NSCoder *)decoder { if (self = [super init]) { unsigned ; Ivar *ivars ...
- Volley Get网络请求
public class VolleyActivity extends AppCompatActivity { WebView webView; Button button; RequestQueue ...
- window傻瓜式安装tensorflow
最近学习一下,比较热门的深度学习. 本人英文差,记性差,什么都差,哈哈. 折腾过ub安装,虽然成功,但是总是觉得不好用. 发现tenorflow已经可以很傻瓜的在windows下安装了....... ...
- phpStorm使用技巧总结
工欲善其事,必先利其器. 拥有一个好的工具不仅可以事半功倍,而且也令人神清气爽. 在编辑器上,我所走过的路是这样的:notepad(对,就是最原始的WIN下的note) -> editplus ...
- 操作Linux系统环境变量的几种方法
一.使用environ指针输出环境变量 代码如下: #include<stdio.h> #include<string.h> #define MAX_INPUT 20 /* 引 ...
- jQuery学习(2)ajax()使用
在上一篇分享JavaScript之使用AJAX(适合初学者)中,我们学习了如何在JavaScript中使用AJAX.由于jQuery出色的性能和简洁的写法,且它也支持AJAX的使用,所以,本次分享 ...
- es6中的部分新特性
1.es6中变量声明可以使用let声明变量,用const声明常量.例: test:function(){ { var num=10; let num1=11; const num2=12; } con ...
- 初识SqlLite ---.net连接数据库
Sqlite 是一款轻量级的关系型数据库,以小巧和嵌入式闻名.以前只是听说,现在终于忍不住要尝试下.本文的初衷是为.net平台的使用者提供帮助. Sqlite有专门为VS2010开发的程序包,大家可以 ...
- maven配置之:<distributionManagement>snapshot快照库和release发布库
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...