C++ STL之Vector
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。
vector 属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
vector是C++用于数组类的容器,它可以被近似的认为是一个自动增长的动态数组
1.基本操作
1)头文件 #include<vector>
2) 创建和初始化
vector<int> a ; //声明一个int型向量a
vector<int> a() ; //声明一个初始大小为10的向量
vector<int> a(, ) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
还可以用数组直接初始化向量
int n[] = {, , , , } ;
vector<int> a(n, n+) ; //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[], &n[]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
3) 插入元素
尾部插入:
v.push_back(5); //将数字5插入到v的尾部
对于定长的数组 可以使用下标输入元素
vector<int> v[];
for(int i = ; i < ; i++){
v[i] = i;
}
用insert插入元素:
v.insert(v.begin()+i,a) //在第i+1个元素前面插入a
v.insert(v.begin(), , ) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)
vector<int> a(, ) ;
vector<int> b() ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
4)访问元素
可以直接用下标访问:
for(int i = ; i < ; i++){
v[i] = i;
}
使用迭代器访问元素
for(it = v.begin(); it != end(); it++){
cout << *it << endl;
}
5)删除元素:
v.erase(v.begin()+) //删除第三个元素
v.erase(v.begin()+i,v.end()+j) //删除区间[i,j-1],从区间0开始计算
6)数组大小(数组存储的个数)
v.size()
7) 清空整个数组
v.clear();
8)交换 swap
v1.swap(v2);
9) 复制
vector<int> v1;
v1.push_back();
v2 = v1;
10)比较 保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1
2.vector 元素类型
1)可以是基础元素类型,int,double,float,还可以是自定义的结构体
#include<iostream>
#include<vector>
using namespace std; struct Student{
char name[];
int age;
}; int main(){
vector<Student> v;
Student stu;
stu.name = "wangtianshui";
stu.age = ;
v.push_back(stu);
vector<int>:: iterator it = begin(); cout << (*it).name << (it*).age << endl;
return ;
}
2)二维数组
vector<int,vector<int> > v;
3)还可以可以是string类型,以及和string组成二位字符串数组(在某些PAT习题中有体现)
4)结构体里的字符串也可以是string定义的。
3.算法
算法的头文件是#include<algorithm>
1) 配合sort进行排序
sort(v.begin(),v.end()); //sort默认从小到大
可以重定义比较函数
bool cmp(const int a, const int b){
return a>b;
}
sort(v.begin(),v.end(),cmp);//调用后数组中元素就是从大到小排序了
2)reverse()
reverse(v.begin(),v.end());//此后的数组元素就被翻转过来了
3)结构体重载比较
struct Student{
int score;
int age;
//按照分数降序,年龄升序排列
bool operator<(const Student &a) const{
if(score != a.score) return score > a.score;
else return age < a.age;
}
}stu;
int main(){
vector<Student> stu;
for(int i = ; i < n; i++){
cin >> stu[i]].score >> stu[i].age;
}
vector<Student>:: iterator t;
for(t = stu.begin(); it != stu.end(); it++){
cout <<(*t).score << (*t).age << endl;
}
------------------------------------------------------------------------------------
先整理这些,以后遇到不同的用法再补充
C++ 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 ...
随机推荐
- shell chmod中数字与字母的含义
数字与字母的组合是chmod命令赋予文件,目录访问权限的方式 访问权限:可读,可写,可执行 字母表示:r , w , x 数字表示:4 , 2 , 1 , ...
- libcurl用法
本文以向百度搜索开放平台搜索关键字所对应的推荐搜索条目为例子: url:http://m.baidu.com/su?wd=%s&action=opensearch&ie=utf-8 ( ...
- Django框架 之 admin管理工具(组件使用)
Django框架 之 admin管理工具(组件使用) 浏览目录 激活管理工具 使用管理工具 admin的定制 admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理 ...
- 无法链接到windows服务
1.先将鼠标移动到桌面右下角的显示桌面按钮处,选择右侧按钮列表中的搜索列表,输入cmd.exe,右击搜索结果,选择以管理员身份运行. 2.然后输入netsh winsock reset catalog ...
- Go程序设计3——并发编程
1 channel 一般channel的声明形式为: var chanName chan ElementType 与一般的变量声明不同的地方仅仅是在类型之前增加了chan关键字.ElementType ...
- 编写高质量代码改善C#程序的157个建议——建议12: 重写Equals时也要重写GetHashCode
建议12: 重写Equals时也要重写GetHashCode 除非考虑到自定义类型会被用作基于散列的集合的键值:否则,不建议重写Equals方法,因为这会带来一系列的问题. 如果编译上一个建议中的Pe ...
- HttpClient connectionTimeout
转自:http://www.cnblogs.com/carlosk/archive/2013/03/12/2956502.html 前几天服务器端的产品经理跑来问我是否有做请求超时和响应超时的处理.我 ...
- Ext JS v2.3.0 Ext.grid.ColumnModel renderer Record 获取列值
场景:设置某一列的值,但是需要获取其他列的值 {"header": '<s:property value="name" />', "wid ...
- JAVA的IO处理【转】
I/O简介 IO是输入和输出的简称,在实际的使用时,输入和输出是有方向的.就像现实中两个人之间借钱一样,例如A借钱给B,相对于A来说是借出,而相对于B来说则是借入.所以在程序中提到输入和输出时,也需要 ...
- Sharepoint2013搜索学习笔记之自定义结果精简分类(八)
搜索结果页左边的结果精简分类是可以根据搜索结果自定义的,在搜索的部门日志结果集页面上我搜索测试关键字,左边分类导航在默认分类的基础上增加了一个日志类型的分类,如下图: 要实现这个效果,导航到之前定义的 ...