C++STL之vector向量容器

vector向量容器

vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素

vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间

vector容器的下标是从0开始计数的, 也就是说, 如果vector容器的大小是n, 那么, 元素的下标是0~n-1

对于vector容器的容量定义, 可以事先定义一个固定的大小, 事后, 可以随时调整其大小;

也可以事先不定义, 随时使用push_back()方法从尾部扩张元素, 也可以使用insert()在某个元素位置前插入新元素

vector容器有两个重要的方法, begin()和end().

begin()返回的是首元素位置的迭代器

end()返回的是最后一个元素的下一个元素位置的迭代器

1.1创建vector对象

(1)不指定容器的元素个数, 如定义一个用来存储整型的容器:

vector<int> v;

(2)创建时, 指定容器的大小, 如定义一个用来存储10个double类型元素的向量容器

vector<double> v(10);

注意, 元素的下标为0~9; 另外, 每个元素的值被初始化为0.0

(3)创建一个具有n个元素的向量容器对象, 每个元素具有指定的初始值:

vector<double> v(10, 8.6)

上述语句定义了v向量容器, 共有10个元素, 每个元素的值是8.6

1.2尾部元素扩张

尾部追加元素, vector容器会自动分配新内存空间, 可对空的vector对象扩张, 也可对已有元素的vector对象扩张

下面代码将2,7,9三个元素从尾部添加到v容器中, 这样, v容器中就有了三个元素, 其值依次是2,7,9

#include<iostream>

#include<vector>

using namespace std;

int main()

{

vector<int> v;

v.push_back(2);

v.push_back(7);

v.push_back(9);

for(vector<int>::iterator it = v.begin(); it != v.end(); it++)

{

cout << *it << " ";

}

cout << endl;

return 0;

}

1.3下标方式访问vector元素

对于vector对象, 可以采用下标方式随意访问它的某个元素, 当然, 也可以以下标的方式对某元素重新赋值, 这点类似于数组的访问方式

下面的代码就是采用下标方式对数组赋值, 再输出元素的值2,7,9:

#include<iostream>

#include<vector>

using namespace std;

int main()

{

vector<int> v(3);

v[0] = 2;

v[1] = 7;

v[2] = 9;

cout << v[0] << " " << v[1] << " " << v[2] << endl;

return 0;

}

1.4用迭代器访问vector元素

常使用迭代器配合循环语句来对vector对象进行遍历访问, 迭代器的类型一定要与它要遍历的vector对象的元素类型一致

下面的代码采用迭代器对vector进行了遍历, 输出2,7,9:

#include<iostream>

#include<vector>

using namespace std;

int main()

{

vector<int> v(3);

v[0] = 2;

v[1] = 7;

v[2] = 9;

//定义迭代器变量

vector<int>::iterator it;

for(it = v.begin(); it != v.end(); it++)

{

//输出迭代器上的元素值

cout << *it << " ";

}

cout << endl;

return 0;

}

1.5元素的插入

insert()方法可以在vector对象的任意位置前插入一个新的元素, 同时, vector自动扩张一个元素空间, 插入位置后的所有元素依次向后挪动一个位置

要注意的是, insert()方法要求插入的位置, 是元素的迭代器位置, 而不是元素的下标

下面的代码输出结果是: 8,2,1,7,9,3:

#include<iostream>

#include<vector>

using namespace std;

int main()

{

vector<int> v(3);

v[0] = 2;

v[1] = 7;

v[2] = 9;

//在最前面插入新元素, 元素值为8

v.insert(v.begin(), 8);

//在第2个元素前面插入新元素1

v.insert(v.begin() + 2, 1);

//在向量末尾追加新元素3

v.insert(v.end(), 3);

//定义迭代器变量

vector<int>::iterator it;

for(it = v.begin(); it != v.end(); it++)

{

//输出迭代器上的元素值

cout << *it << " ";

}

cout << endl;

return 0;

}

1.6元素的删除

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素

clear()方法则可以一次性删除vector中的所有元素

下面这段代码演示了vector元素的删除方法:

#include<iostream>

#include<vector>

using namespace std;

int main()

{

vector<int> v(10);

//给向量赋值

for(int i = 0; i < 10; i++)

{

v[i] = i;

}

//删除2号元素, 从0开始计数

v.erase(v.begin() + 2);

//定义迭代器变量

vector<int>::iterator it;

for(it = v.begin(); it != v.end(); it++)

{

//输出迭代器上的元素值

cout << *it << " ";

}

cout << endl;

//清空向量

v.clear();

//输出向量大小

cout << v.size() << endl;

return 0;

}

1.7使用reverse反向排列算法

reverse 反向排列算法, 需要定义头文件"#include<algorithm>", 可将向量中某段迭代器区间元素反向排列, 看下面这段代码:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

int main()

{

vector<int> v(10);

//给向量赋值

for(int i = 0; i < 10; ++i)

{

v[i] = i;

}

//反向排列向量的从首到尾的元素

reverse(v.begin(), v.end());

//定义迭代器变量

vector<int>::iterator it;

for(it = v.begin(); it != v.end(); it++)

{

//输出迭代器上的元素值

cout << *it << " ";

}

cout << endl;

return 0;

}

1.8使用sort算法对向量元素排序

使用sort算法, 需要声明"include<algorithm>"头文件

sort算法要求使用随机访问迭代器进行排序, 在默认的情况下, 对向量元素进行升序排列, 下面这个程序很好的说明了sort算法的使用方法:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

int main()

{

vector<int> v;

int i;

//赋值

for(i = 0; i < 10; ++i)

{

v.push_back(9 - i);

}

//输出排序前的元素值

for(i = 0; i < 10; ++i)

{

cout << v[i] << " ";

}

cout << endl;

//排序, 升序排列

sort(v.begin(), v.end());

//输出排序后的元素值

for(i = 0; i < 10; ++i)

{

cout << v[i] << " ";

}

cout << endl;

return 0;

}

还可以自己设定排序比较函数, 然后, 把这个函数指定给sort算法, 那么, sort就根据这个比较函数指定的排序规则进行排序, 下面的程序自己设计了一个排序比较函数Comp, 要求对元素的值由大到小排序:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

//自己设计的排序比较函数, 对元素的值进行降序排列

bool Comp(const int &a, const int &b)

{

if(a != b)

return a > b;

else

return a > b;

}

int main()

{

vector<int> v;

int i;

for(i = 0; i < 10; ++i)

{

v.push_back(i);

}

for(i = 0; i < 10; ++i)

{

cout << v[i] << " ";

}

cout << endl;

sort(v.begin(), v.end(), Comp);

for(i = 0; i < 10; ++i)

{

cout << v[i] << " ";

}

cout << endl;

return 0;

}

1.9向量的大小

使用size()方法可以返回相连的大小, 即元素的个数

使用empty()方法可以返回向量是否为空

下面这段代码演示了size()方法和empty()方法的用法:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;

int main()

{

vector<int> v(10);

for(int i = 0; i < 10; ++i)

{

v[i] = i;

}

cout << v.size() << endl;    //元素的个数

cout << v.empty() << endl;    //非空为0

v.clear();

cout << v.empty() << endl;    //空为1

return 0;

}

/*

10

0

1

*/

另外, 向量的类型可以是int, double, char等简单类型, 也可以是结构体或string基本字符序列容器, 使用起来非常灵活.

原文地址:https://www.cnblogs.com/mjn1/p/10296768.html

时间: 2024-10-01 02:56:10

C++STL之vector向量容器的相关文章

第6章 vector向量容器

/* 第三篇 C++STL容器技术 第6章 vector向量容器 6.1 vector技术原理 6.2 vector应用基础 6.3 本章小结 */ // 第6章 vector向量容器 // 6.1 vector技术原理 ------------------------------------------------------------------------------------------- // 6.2 vector应用基础 -----------------------------

标准模板库使用参考——vector向量容器

C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,STL被组织成为下面的13个头文件:<algorithm>, <deque>, <functional>, <iterator>, <vector>, <list>, <map>, <memory>, <nume

C++ STL vector 向量容器 基本方法

创建vector对象 1.不指定容器大小 vector<int> vec; 2.指定容器大小 vector<int> vec(10); 3.指定容器大小和初始值 vector<int> vec(10,0); 尾部元素扩张 vec.push_back(); 插入元素 1.在最前面插入元素 vec.insert(vec.begin() , 2); 2.在第二个元素前插入元素 vec.insert(vec.begin()+2 , 2); 3.在末尾插入元素 vec.inser

vector向量容器

vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念.vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间. 创建vector对象 有多种方式 (1) vector(constA&a=A()) 创建一个空的vector对象,A是内存分配器,此参数可以省略,相当于一个vector()的调用,如: vector&l

oj教程--向量容器

vector向量容器不但像数组一样对元素进行随机访问,还能在尾部插入元素,是一个简单.高效的容器, 完全可以替代数组.vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占用的内存空间. 使用vector向量容器,需要头文件包含声明"#include 一.创建vector对象 vector<type> vec1; // v1保存类型为type的对象,默认构造函数,v1为空 vector<type> vec2(size); // v2含有值初始化的元素的s

C++ STL中vector(向量容器)使用简单介绍

原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存. 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即cap

【C++】STL,vector容器操作

C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头文件:#include <vector>.vector 是一个类模板.不是一种数据类型,vector<int>是一种数据类型.Vector的存储空间是连续的,list不是连续存储的. 一. 定义和初始化vector< typeName > v1;       //默认v1为

C++STL之vector容器

初学STL,以下内容且当自己积累用,日后再慢慢完善. 向量容器(vector)是一种顺序容器,是一块连续分配的内存,支持随机访问,从数据安排的角度看,和数组极其相似. 数组跟vector的区别在于:数组是静态分配空间,一旦分配了空间的大小,就不可以再改变了,例如,int a[6];而vector是动态分配内存,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量,vector容器的容量增长是按照容器现在容量的一倍进行增长. 至于迭代器,它类似一个指向vector中元素的指针. -----

C++——STL之vector, list, deque容器对比与常用函数

STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表,内存空间可不连续,不支持随机存取.插入和删除的效率很高: deque  双端队列,内存空间是多个连续的内存块,在一个映射结构中保存对这些块以及顺序的跟踪,可利用的内存更大,且内存大小是可以自动缩减的.支持随机存取,但是随机存取性能没有vector 好.首尾插入效率高,其他位置插删效率低: 使用注意