c++中stl----vector
1 vector是啥玩意
(1)可以使用下标访问个别的元素
(2)迭代器可以按照不同的方式遍历
(3)可以在容器的末尾增加或者删除元素
2 容器大小和容器的容量区别
(1)大小是元素的个数,容量是分配的内存大小。vector::size()容器的大小 vecto::capacity返回容器值。
(2)每次重新分配内存都会影响程序的性能,所以一般分配的容量都打羽容器的大小。
3 vector中各种初始化方法

#include <vector>
#include <iostream>
using namespace std;
int main(){
int a[7]={1,2,3,4,5,6,7};
vector<int> ivector(a,a+7);/*vector的赋值并不可以像数组一样方便的用花括号方便 的完成赋值,这里借用了数组来初始化这个vector
初始化方式vector<elementType> intvec(begin,end);这样可以用起来看上去还是比较习惯的。*/
vector<int>::iterator iter;
for (iter=ivector.begin();iter!=ivector.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
ivector[5]=1;
/*单个vector的赋值,这个方式看上去还是和数组一样的
也可以这么写ivector.at(5)=1;但是就是不习惯 */
cout<<ivector[5]<<endl<<ivector.size()<<endl;
for (iter=ivector.begin();iter!=ivector.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
for(int i=0;i<5;i++){
cout<<ivector[i]<<" ";
}
cout<<endl;
return 0;
}
foreach用法:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std; void print(int n)
{
cout<<n<<" ";
} int main(){
int a[7]={1,2,3,4,5,6,7};
vector<int> ivector(a,a+7);
vector<int>::iterator iter;
for_each(ivector.begin(),ivector.end(),print);//用for_each进行遍历
cout<<endl;
ivector[5]=1;
cout<<ivector[5]<<endl<<ivector.size()<<endl;
for_each(ivector.begin(),ivector.end(),print);//用for_each进行遍历
return 0;
}
vector中存入结构体而且排序,不会自动排序
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std; typedef struct rect{
int id;
int length;
int width;
//重载<运算符
bool operator< (const rect &a) const{
if(id!=a.id)
return id<a.id;
else{
if(length!=a.length)
return length<a.length;
else
return width<a.width;
}
}
}Rect; int main(){
vector<Rect> vec;//vector存入结构体
//初始化
Rect rect;
rect.id=2;
rect.length=3;
rect.width=4;
//存入vector中
vec.push_back(rect); rect.id=1;
rect.length=2;
rect.width=3;
vec.push_back(rect);
//进行输出
vector<Rect>::iterator it=vec.begin();
cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;
sort(vec.begin(),vec.end());
cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;
return 0;
}
vector中的查找
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
//进行查找
vector<int>::iterator iter=find(vec.begin(),vec.end(),3);
if ( iter==vec.end())
cout << "Not found" << endl;
else
cout << "Found" << endl;
return 0;
}
vector中的删除
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vector<int>::iterator iter=vec.begin();
for(;iter!=vec.end();){
if(*iter==3){
//这里注意返回是迭代器哦
iter=vec.erase(iter);
}else{
++iter;
}
}
for(iter=vec.begin();iter!=vec.end();iter++){
cout<<*iter<<" ";
}
return 0;
}
4 vector的内存管理与效率
关于STL容器,只要超过设置的最大值就会自动增长到足以容纳用户放进入的数据大小。
(1)内部采用动态数组方式实现。
(2)注意了,通过reverse申请特定大小的内存空间的时候总是按照指数边界来增大内部缓冲区。
当进行插入等操作的时候,如果内存不够用,这个时候会重新分配1.5-2倍的新内存空间,然后将内容复制过去。这个时候性能的确就会下降。
(3)使用“交换技巧”来修整vector过剩空间。也就是把它曾经最大的容量减少到它现在需要的容量。
vector<int>(ivec).swap(ivec).
(4)使用swap方法强行释放vector所占内存
例子
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> iVec;
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*1个元素,容器容量为1*/
iVec.push_back(1);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*2个元素,容器容量为2*/
iVec.push_back(2);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*3个元素,容器容量为4*/
iVec.push_back(3);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*4个元素,容器容量为4*/
iVec.push_back(4);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*5个元素,容器容量为8*/
iVec.push_back(5);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*6个元素,容器容量为8*/
iVec.push_back(6);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*7个元素,容器容量为8*/
iVec.push_back(7);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*8个元素, 容器容量为8*/
iVec.push_back(8);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*9个元素, 容器容量为16*/
iVec.push_back(9);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /* vs2005/8 容量增长不是翻倍的,如
9个元素 容量9
10个元素 容量13 */ /* 测试effective stl中的特殊的交换 swap() */
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl;
vector<int>(iVec).swap(iVec); cout<<"临时的vector<int>对象的大小为:"<<(vector<int>(iVec)).size()<<endl;
cout<<"临时的vector<int>对象的容量为: " <<(vector<int>(iVec)).capacity()<<endl;
cout<<"交换后,当前vector的大小为:"<<iVec.size()<<endl;
cout<<"交换后,当前vector的容量为:"<< iVec.capacity()<<endl; return 0;
}
最后这里有点别扭,后面再看看。。。。加油骚年。。。。
c++中stl----vector的更多相关文章
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
- 数据结构与算法(3)- C++ STL与java se中的vector
声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...
- STL—Vector简介
有关C++ STL 中的vector向量的用法(代码示例) 一. 简介 Vector是一个称为向量的顺序容器(不明白顺序容器与关联容器的可以Google). 二. 特点 1. 动态(相当于一个动态数组 ...
- C++ STL vector容器学习
STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...
- STL vector
STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
随机推荐
- Linux虚拟服务器--LVS
LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...
- git操作演示
阶段一: git init git config --global user.email "you@example.com" git config --global user.na ...
- 文件共享和使用 dup 函数创建新描述符的区别
前言 文件共享是指同时打开一个文件 用 dup 函数能对指定文件描述符再创建一个新的描述符,且这个新的描述符和旧的描述符指向的是同一个文件. 这两种行为有什么区别呢?下面给出的两张文件系统的图形象的解 ...
- 代写GIS系统
代写GIS系统,熟悉arcgis,leaflet ,百度地图等api.可以提供系统代写,技术咨询等
- 【转】IDA 调试 Android
最近都在学一些反编译安卓相关的东西,其实网上有很多教程关于用 IDA 调试 Android 的过程,主要记录一下我遇到的坑 首先 Android手机要是root过的 还要注意的一点是apk中的 And ...
- LeetCode(155)题解--Min Stack
https://leetcode.com/problems/min-stack/ 题目: Design a stack that supports push, pop, top, and retrie ...
- Android SDK 更新不下来解决方法
国内的小伙伴是不是更新SDK总是更新不动呢,小弟找到一个好的解决方式,把SDK的全部都下载全了也就用了一个小时,匀速2M/s. 解决方法是改动win7的host文件. 路径:C:\Windows\Sy ...
- redis的主从复制和哨兵支持的主从切换
1 主从复制的目的是为了读写分离 master写,然后同步到slave,slave只管读. 2 哨兵存在的目的 是为了主从切换,如果master挂了,那么一个slave成为master,重启之后的ma ...
- left outer join preserving unmatched rows from the first table
https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj18922.html INNER JOIN operation Specifies a join ...
- Cocos2d-JS 项目接入 触控广告平台(基于anysdk2.0.2)
本文以Cocos2d-JS项目作为示例,讲解如何集成AnySDK-JS. 一.如何创建项目我就省略了,直接进入主题. 1.1 首先,我需要下载anysdk框架包,下载地址:http://www.any ...