vector容器用法详解
vector用法

vector是一个十分有用的容器,下面对这个容器做一下总结。
1 基本操作(1)头文件#include<vector>.(2)创建vector对象,vector<int> vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.vector<int>::iterator it;for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;(6)插入元素:vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;(7)删除元素:vec.erase(vec.begin()+2);删除第3个元素vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始(8)向量大小:vec.size();(9)清空:vec.clear();2vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。
下面是一段简短的程序代码:#include<stdio.h>#include<algorithm>#include<vector>#include<iostream>using namespace std;typedef struct rect{int id;int length;int width;//对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。
bool operator< (const rect &a) const{if(id!=a.id)return id<a.id;else{if(length!=a.length)return length<a.length;elsereturn width<a.width;}}}Rect;int main(){vector<Rect> vec;Rect 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; return0;}3 算法(1) 使用reverse将元素翻转:需要头文件#include<algorithm>reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)(2)使用sort排序:需要头文件#include<algorithm>,sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).可以通过重写排序比较函数按照降序比较,如下:定义排序比较函数:bool Comp(const int &a,const int &b){return a>b;}调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。
c++ vector用法

c++ vector用法
vector是C++标准模板库定义的一种容器类型,它和数组类似,允许用户储存并随机
访问任意多的元素。
与数组不同的是,vector可以动态的增长和减少控制存储元素的数量。
vector主要由三部分组成:
(1) vector本身,它是一个容器对象,用于存放元素;
(2) 元素类型,vector是一个类模板,它使用用户定义的特定类型元素;
(3) 容器操作,为了实现多态性,vector模板定义了一些接口,操作元素,包括插入元素和查询等。
(1) vector用于储存和操作大量的元素, vector 可以快速的在后面追加元素,不必担心在追加的过程中发生“越界”的问题;
(2) vector 是标准库提供的一个随机访问的容器,也就是说,用户可以直接根据下
标访问 vector 中的任一元素,vector 会自动处理访问越界等异常情况;
(3) vector 可以与迭代器结合使用,使用迭代器可以方便的对 vector 中的元素进
行操作;
(4) vector 还可以方便的查找、替换更新元素,也可以排序、合并元素,可以使用erase() 函数移除元素;
(5) vector 还提供了区间 erase 函数,使用这个函数可以删除某一区间的元素;
总之,vector 是非常实用的一种容器,它可以方便的储存、查找、替换元素,使用
它可以简化很多复杂操作,提高程序开发效率。
vector用法

vector用法Vector是C++标准模板库(STL)中提供的最常用的容器之一,是一种多功能的动态数组,允许存储任意大小的数据集合,并能够自动更新其内部结构以方便存取,而不需要任何编程技巧即可使用。
Vector的特性极大地简化了程序员的编码任务,使得程序员可以节约大量的时间来进行编写,并改善应用程序的性能。
因此,Vector是C++语言开发人员最常用的容器之一。
Vector从语法上来看,是一种模板,它允许存储任意大小的数据集合,并能够自动更新其内部结构以方便存取。
该模板接受任意类型的参数,这样程序员就可以根据实际情况创建适合自己需求的容器。
Vector的优点主要有:Vector可以容纳任意大小的数据集合,不必担心容量的增长。
Vector的随机访问功能非常强大,可以快速获取任何元素。
Vector支持动态扩容,可以自动增长容量,以容纳更多数据。
Vector具有内存安全性,可以防止非法写入或读取操作。
Vector支持排序,可以帮助快速搜索所需数据。
Vector支持快速删除任何元素,同时仍保持数据有序。
Vector具有可移植性,可以将其放置在任何位置,以满足程序开发需求。
Vector常用的函数有:push_back:将给定元素以相继方式添加到Vector尾部。
pop_back:从Vector尾部移除一个元素。
size:返回Vector中元素个数。
empty:返回Vector是否为空。
begin:返回Vector头部迭代器。
end:返回Vector尾部迭代器。
clear:清空Vector中的所有元素。
sort:按照升序排序Vector中的元素。
Vector在使用时需要注意的问题:Vector可能带来额外的开销:使用Vector对内存开销更高,因为Vector内部实现了很多内存分配和释放机制来实现其可扩展性,这会带来一定的效率损失。
Vector可能比其他容器更慢:Vector的容量增长机制会使其比一般的数组慢很多,因为它需要频繁的内存移动操作才能保持插入元素时的有序性。
Vector容器详解

Vector容器详解Vector容器前⾔STL⼤体分为六⼤组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。
STL容器就是将运⽤最⼴泛的⼀些数据结构实现出来常⽤的数据结构:数组, 链表,树, 栈, 队列, 集合, 映射表等概念vector数据结构和数组⾮常相似,也称为单端数组。
vector与普通数组区别:不同之处在于数组是静态空间,⽽vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,⽽是找更⼤的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是⽀持随机访问的迭代器vector存放内置数据类型容器: vector算法: for_each迭代器: vector::iterator#include <vector>#include <algorithm>void MyPrint(int val){cout << val << endl;}void test01() {//创建vector容器对象,并且通过模板参数指定容器中存放的数据的类型vector<int> v;//向容器中放数据v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);//每⼀个容器都有⾃⼰的迭代器,迭代器是⽤来遍历容器中的元素//v.begin()返回迭代器,这个迭代器指向容器中第⼀个数据//v.end()返回迭代器,这个迭代器指向容器元素的最后⼀个元素的下⼀个位置//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型vector<int>::iterator pBegin = v.begin();vector<int>::iterator pEnd = v.end();//第⼀种遍历⽅式:while (pBegin != pEnd) {cout << *pBegin << endl;pBegin++;}//第⼆种遍历⽅式:for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << endl;}cout << endl;//第三种遍历⽅式://使⽤STL提供标准遍历算法头⽂件 algorithmfor_each(v.begin(), v.end(), MyPrint);}int main() {test01();system("pause");return0;}内置数据类型存放Vector存放⾃定义数据类型#include <vector>#include <string>//⾃定义数据类型class Person {public:Person(string name, int age) {mName = name;mAge = age;}public:string mName;int mAge;};//存放对象void test01() {vector<Person> v;//创建数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);Person p5("eee", 50);v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) { cout << "Name:" << (*it).mName << " Age:" << (*it).mAge << endl; }}//放对象指针void test02() {vector<Person*> v;//创建数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);Person p5("eee", 50);v.push_back(&p1);v.push_back(&p2);v.push_back(&p3);v.push_back(&p4);v.push_back(&p5);for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) { Person * p = (*it);cout << "Name:" << p->mName << " Age:" << (*it)->mAge << endl; }}int main() {test01();test02();system("pause");return0;}vector赋值操作函数原型:vector& operator=(const vector &vec); //重载等号操作符assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本⾝。
C++中vector使用详细说明(转)

C++中vector使⽤详细说明(转)转⾃:⼀、向量的介绍向量 vector 是⼀种对象实体, 能够容纳许多其他类型相同的元素, 因此⼜被称为容器。
与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的⼀种⾃定义的数据类型, 可以⼴义上认为是数组的增强版。
在使⽤它时, 需要包含头⽂件 vector, #include<vector>vector 容器与数组相⽐其优点在于它能够根据需要随时⾃动调整⾃⾝的⼤⼩以便容下所要放⼊的元素。
此外, vector 也提供了许多的⽅法来对⾃⾝进⾏操作。
⼆、向量的声明及初始化vector 型变量的声明以及初始化的形式也有许多, 常⽤的有以下⼏种形式:vector<int> a ; //声明⼀个int型向量avector<int> a(10) ; //声明⼀个初始⼤⼩为10的向量vector<int> a(10, 1) ; //声明⼀个初始⼤⼩为10且初始值都为1的向量vector<int> b(a) ; //声明并⽤向量a初始化向量bvector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值除此之外, 还可以直接使⽤数组来初始化向量:int n[] = {1, 2, 3, 4, 5} ;vector<int> a(n, n+5) ; //将数组n的前5个元素作为向量a的初值vector<int> a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值三、元素的输⼊及访问元素的输⼊和访问可以像操作普通的数组那样, ⽤cin>>进⾏输⼊, cout<<a[n]这样进⾏输出:⽰例:1 #include<iostream>2 #include<vector>34 using namespace std ;56 int main()7 {8 vector<int> a(10, 0) ; //⼤⼩为10初值为0的向量a910 //对其中部分元素进⾏输⼊11 cin >>a[2] ;12 cin >>a[5] ;13 cin >>a[6] ;1415 //全部输出16 int i ;17 for(i=0; i<a.size(); i++)18 cout<<a[i]<<" " ;1920 return 0 ;21 }在元素的输出上, 还可以使⽤遍历器(⼜称迭代器)进⾏输出控制。
C++Vector用法详解

C++Vector⽤法详解vector是C++标准模版库(STL,Standard Template Library)中的部分内容。
之所以认为是⼀个容器,是因为它能够像容器⼀样存放各种类型的对象,简单的说:vector是⼀个能够存放任意类型的动态数组,能够增加和压缩数据。
使⽤vector容器之前必须加上<vector>头⽂件:#include<vector>;vector属于std命名域的内容,因此需要通过命名限定:using std::vector;也可以直接使⽤全局的命名空间⽅式:using namespace std;vector成员函数c.push_back(elem)在尾部插⼊⼀个elem数据。
复制代码代码如下:vector<int> v;v.push_back(1);c.pop_back()删除末尾的数据。
复制代码代码如下:vector<int> v;v.pop_back();c.assign(beg,end)将[beg,end)⼀个左闭右开区间的数据赋值给c。
vector<int> v1,v2;v1.push_back(10);v1.push_back(20);v2.push_back(30);v2.assign(v1.begin(),v1.end());c.assign (n,elem)将n个elem的拷贝赋值给c。
复制代码代码如下:vector<int> v;v.assign(5,10);//往v⾥放5个10c.at(int index)传回索引为index的数据,如果index越界,抛出out_of_range异常。
vecto<int> v;cout << v.at(2) << endl;//打印vector中下标是2的数据c.begin()返回指向第⼀个数据的迭代器。
vector用法

vector用法Vector是一种容器类,可以存放任意类型的对象,这使其比array更加的方便和强大。
Vector的操作之所以比array容易,主要是因为它可以自动调整大小。
Vector是一种模板类,可以使用任意类型的数据来定义容器,例如:int vector,float vector,string vector等等。
它支持多种功能,包括:添加元素,删除元素,搜索元素,取出指定位置的元素,改变Vector的大小等等。
Vector的构造函数可以通过指定容量(capacity)和容量增量(capacity increment)来进行定制。
capacity表示vector的初始容量,而capacity increment表示vector每次扩容时容量增量(每次扩容都会根据capacity increment来增加vector的容量)。
除此之外,vector还有一个无参数的构造函数,这样可以创建一个空的vector,容量为0。
Vector中存放的对象除了可以是基本数据类型,比如int、float、char等,还可以是类对象,甚至是模板类对象。
Vector有两个重要的成员函数:push_back()和pop_back()。
push_back()的功能是将一个新的元素添加到Vector末尾,而pop_back()的功能是删除Vector末尾的元素。
值得注意的是,push_back()和pop_back()并不会改变Vector的大小,而是用来控制Vector中存储的对象数量。
Vector还提供了其他一些函数来供开发者使用,比如clear()函数,它可以清空Vector中的所有元素;erase()函数,它可以删除Vector中指定位置的元素;size()函数,它可以用来获取Vector中元素的数量等等。
使用Vector可以实现诸如数据统计、数据分析和排序等复杂的功能,因此在开发C++程序中,Vector的运用可以节省很多时间。
vector容器讲解

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector与CList的区别:vector拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝。
CList就是数据结构中的双向链表,因此它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载。
但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。
在实际使用中,应该遵守这样的规则:如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector;如果你需要大量的插入和删除,而不关心随即存取,则应使用list。
而在这个系统中,使用vector只是为了方便进行查询和读取数据,所以采用vecotr容器来存放数据。
如何使用vector:为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>vector属于std命名域的,因此需要通过命名限定,建议使用全局的命名域方式:using namespace std;在后面的操作中全局的命名域方式会造成一些问题。
vector容器提供了很多接口,在下面的表中列出vector的成员函数和操作。
常用的vector的使用介绍:2、vector::operator[]operator[]主要是为了与C语言进行兼容。
它可以像C语言数组一样操作。
但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。
由于operator[]容易造成一些错误,所有我们很少用它,下面进行验证一下:分析下面的代码:vector<int> v;v.reserve(10);for(int i=0; i<7; i++)v.push_back(i);try{int iVal1 = v[7]; // not bounds checked - will not throwint iVal2 = v.at(7); // bounds checked - will throw if out of range}catch(const exception& e){cout << e.what();}5、删除vector中的数据vector能够非常容易地添加数据,也能很方便地取出数据,同样vector提供了erase(),pop_back(),clear()来删除数据,当你删除数据的时候,你应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素
4.遍历函数
reference at(int pos):返回pos位置元素的引用
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//int型vector,包含3个元素
vector<A> vecClassA;
A a1(1);
A a2(2);
A a3(3);
//插入1 2 3
vecClassA.push_back(a1);
vecClassA.push_back(a2);
vector容器用法详解
vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。
vector类常用的函数如下所示:
//float型vector
vector<float> vecFloat;
//自定义类型,保存类A的vector
vector<A> vecA;
//自定义类型,保存指向类A的指针的vector
vector<A*> vecPointA;
return 0;
}
// vectorsample.cpp :定义控制台应用程序的入口点。
cout<<"vecIntD:"<<endl;
for(vector<int>::iterator it = vecIntD.begin() ;it!=vecIntD.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
程序的运行结果如下:
上面的代码用了4种方法建立vector并对其初始化
示例:
1.初始化示例
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
class A
{
//空类
};
int _tmain(int argc, _TCHAR* argv[])
{
//int型vector
vector<int> vecInt;
reference front():返回首元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin():反向迭代器,指向最后一个元素
//打印vecClassA,方法二:
for(int i=0;i<nSize;i++)
{
cout<<vecClassA.at(i).n<<" ";
}
cout<<endl;
//打印vecClassA,方法三:
for(vector<A>::iterator it = vecClassA.begin();it!=vecClassA.end();it++)
//
#include "stdafx.h"
#include<iostream>
#include<vector>
using namespace std;
class A
{
//空类
};
int _tmain(int argc, _TCHAR* argv[])
{
//int型vector,包含3个元素
vector<int> vecIntA(3);
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
5.判断函数
bool empty() const:判断向量是否为空,若为空,则向量中无元素
6.大小函数
int size() const:返回向量中元素的个数
int capacity() const:返回当前向量张红所能容纳的最大元素值
iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
3.删除函数
iterator erase(iterator it):删除向量中迭代器指向元素
vecClassA.push_back(a3);
int nSize = vecClassA.size();
cout<<"vecClassA:"<<endl;
//打印vecClassA,方法一:
for(int i=0;i<nSize;i++)
{
cout<<vecClassA[i].n<<" ";
}
cout<<endl;
//int型vector,包含3个元素且每个元素都是9
vector<int> vecIntB(3,9);
//复制vecIntB到vecIntC
vector<int> vecIntC(vecIntB);
int iArray[]={2,4,6};
//创建vecIntD
vector<int> vecIntD(iArray,iArray+3);
{
cout<<*it<<" ";
}
cout<<endl;
//打印vecIntB
cout<<"VecIntB:"<<endl;
for(vector<int>::iterator it = vecIntB.begin() ;it!=vecIntB.end();it++)
{
cout<<*it<<" ";
}
A *a1 = newA(1);
A *a2 = new A(2);
A *a3 = new A(3);
/ush_back(a1);
vecClassA.push_back(a2);
vecClassA.push_back(a3);
int nSize = vecClassA.size();
2.增加函数
void push_back(const T& x):向量尾部增加一个元素X
iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
cout<<endl;
//打印vecIntC
cout<<"VecIntB:"<<endl;
for(vector<int>::iterator it = vecIntC.begin() ;it!=vecIntC.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
//打印vecIntD
//打印vectorA,此处也可以用下面注释内的代码来输出vector中的数据
/*for(int i=0;i<vecIntA.size();i++)
{
cout<<vecIntA[i]<<" ";
}*/
cout<<"vecIntA:"<<endl;
for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
int max_size() const:返回最大可允许的vector元素数量值
7.其他函数
void swap(vector&):交换两个同类型向量的数据
void assign(int n,const T& x):设置向量中第n个元素的值为x
void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素
{
cout<<vecClassA.at(i)->n<<"\t";
}
cout<<endl;
//打印vecClassA,方法三:
for(vector<A*>::iterator it = vecClassA.begin();it!=vecClassA.end();it++)