vector容器用法详解
- 格式:docx
- 大小:331.12 KB
- 文档页数:17
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用法
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是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容器前⾔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使⽤详细说明(转)转⾃:⼀、向量的介绍向量 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⽤法详解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是一种容器类,可以存放任意类型的对象,这使其比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是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()来删除数据,当你删除数据的时候,你应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。
vector的使用方法容器vector称做向量,相当于可以动态改变大小的数组,使用方法简单。
vector里,提供了大量的函数,其中许多函数,在STL的不同容器里,用法是基本相同的,熟悉了vector,再掌握其容器,会简单的多。
下面说明vector的常用方法。
l 说明和赋值vector <int> viCount ; //定义一个空的整型vectorvector <int> viLen[10] ; //定义一个大小为10的整型vectorvector <string> vsZqdm ; //定义string型的vector下面定义一个struct的vector:typedef struct{char szZqdm[7] ;char szZqmc[9] ;} ZQXX ;vector <ZQXX> vZqdm ;在定义vector <string> 后,VC6里会有4786的警告信息,可以使用#pragma warning(disable:4786)来屏蔽。
对于vector中存在的元素,需要更改其值时,可以使用数组的方式,或成员函数at(),例如:viLen[1]=10;viLen.at(2)=11;l 迭代器iteratoriterator,叫做迭代器,相当于一个指针,指向容器中的元素,是STL许多操作的基础,在遍历容器等场景下必须使用的数据类型。
iterator的说明:vector<int>::iterator it;vector的begin()成员函数返回第一个元素的iterator指针,end()成员函数返回最后一个元素下一个位置的iterator指针。
* iterator返回iterator 所指的元素的值。
下例显示vector中的所有元素:vector <int> viCount(5) ;vector<int>::iterator it;viCount[2]=3;for(it=viCount.begin();it!= viCount.end();it++)cout << *it << endl ;l 增加元素在vector中增加元素,分为在尾部增加,和在中间插入元素两种情况,push_back()在尾部增加元素,insert()在vector中间插入元素。
c++中vector的insert的用法一、文档概述本文档旨在详细介绍C++中vector容器中insert方法的用法。
insert方法是用于在vector的指定位置插入元素的一种非常实用的方法。
通过使用insert方法,我们可以方便地在vector的任意位置插入指定的元素,从而实现对vector的灵活操作。
二、vector容器简介vector是C++标准库中的一个动态数组容器,它提供了随机访问迭代器,支持快速随机访问访问容器中的元素。
vector容器在内存中连续分配空间,因此访问速度非常快。
三、insert方法详解insert方法是在vector容器的指定位置插入一个或多个元素的最常用方法。
它接受两个参数:一个是要插入的位置,另一个是要插入的元素或元素范围。
insert方法有多个重载版本,可以用于在不同情况下插入单个元素、多个元素或一段范围。
1. insert(pos, val):在pos位置插入一个元素val。
2. insert(pos, size, val):在pos位置前插入size个与val 相同的元素。
3. insert(slic, b, e):在pos位置插入范围[b, e)内的所有元素。
四、insert用法示例下面是一些使用insert方法的示例代码,演示了在不同情况下如何使用insert方法在vector中插入元素:1. 在指定位置插入单个元素:```c++#include <iostream>#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};vec.insert(vec.begin() + 2, 6); // 在第三个位置插入元素6,结果为{1, 2, 6, 3, 4, 5}return 0;}```2. 在指定位置前插入多个相同元素:```c++#include <iostream>#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};vec.insert(vec.begin() + 3, 6, 7); // 在第三个位置前插入两个元素6和7,结果为{1, 2, 6, 7, 3, 4, 5}return 0;}```3. 在指定位置插入范围内的所有元素:```c++#include <iostream>#include <vector>#include <algorithm>int main() {std::vector<int> vec = {1, 2};vec.insert(vec.begin() + 1, std::vector<int>({3, 4})); // 在第二个位置前插入一个向量{3, 4},结果为{1, 3, 4, 2} return 0;}```以上示例代码展示了如何使用insert方法在不同情况下向vector中插入元素。