C++入门学习——标准模板库之vector

vector(向量容器),是 C++ 中十分有用一个容器。vector 之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector 是一个能够存放任意类型(类型可以是int, double, string, 还可以是类)的动态数组,能够增加和压缩数据。

使用 vector 之前,必须包含相应的头文件,vector 属于 std 命名域的,因此需要通过命名限定:

#include <vector>

using std::vector; //using namespace std;

vector 对象的定义和初始化

vector<int> a; //创建一个int类型的空的vector对象,没有任何元素
vector<int> b(a); //b 是 a 的副本
vector<string> str(10, "mike"); //10个str,每个的内容都是"mike"
vector<int> c(10); //创建10个int类型vector对象,相当于c[10],每个元素的值默认为0

vector 对象常用操作

使用示例如下:

#include <iostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;
//using namespace std;

int main( )
{
	vector<int> a(10); //创建10个int类型vector对象,相当于c[10],每个元素的值为0

	//判断 a 是否为空
	if( true == a.empty() ){
		cout << "it is empty\n";
	}else if(false == a.empty() ){ //结果不为空
		cout << "it is not empty\n";
	}

	//返回 a 中元素的个数。
	cout << "size = " << a.size() << endl; // 结果为10

	// 在 a 的末尾增加一个值为 5 的元素。
	// 本来有10个元素,再添加一个,变为11个
	a.push_back(5);

	//下标操作元素,有11个元素,0~10
	//打印最后一个元素
	cout << a[a.size() -1] << endl; //结果为 5

	// 下标法,把所有元素的值打印出来
	// vector<int>::size_type 可以当做 int 使用
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		cout << a[i] << ", ";
	}
	cout << endl;

	cout << "size before pop_back = " << a.size() << endl;
	a.pop_back(); //删除容器最后位置处的元素
	cout << "size after pop_back = " << a.size() << endl;

	// 下标法,给所有元素赋值
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		a[i] = 5;
	}

	cout << "it is a:\n";
	// 把 a 所有元素的值打印出来
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		cout << a.at(i) << ", ";
	}
	cout << endl;

	vector<int> b = a; //b是a的复制品

	cout << "it is b:\n";
	// 把 b 所有元素的值打印出来
	for(vector<int>::size_type i = 0; i != a.size(); i++){
		cout << b[i] << ", ";
	}
	cout << endl;

	a.clear(); //清除所有元素
	cout << "size after clear = " << a.size() << endl;

	return 0;
}

运行结果如下:

迭代器操作 vector 对象

除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator) 。迭代器是一种检查容器内元素并遍历元素的数据类型。实际上,vector 对象相当于数组,而迭代器就相当于指针

每种容器类型都定义了自己的迭代器类型,如 vector:

vector<int>::iterator iter;

使用示例如下:

#include <iostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;
//using namespace std;

int main( )
{
	vector<int> v(10, 5); //有10个元素,每个元素的值都是5

	//通过迭代器把所有元素的值打印出来
	vector<int>::iterator it;
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;

	//通过迭代器给所有元素赋值为1
	for( it=v.begin(); it!=v.end(); it++){
		*it = 1;
	}

	cout << endl;
	//通过迭代器把所有元素的值打印出来
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;

	it = v.begin(); //返回指向容器最开始位置元素的指针(迭代器)
	//删除指针it+1指向位置的元素,返回指向下一个元素位置的指针(迭代器)
	v.erase(it+1); 

	cout << endl << "after erase:\n";
	//通过迭代器把所有元素的值打印出来
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;

	it = v.begin();
	//在位置it后插入3个5
	v.insert(it, 3, 5);

	cout << endl << "after insert:\n";
	//通过迭代器把所有元素的值打印出来
	for( it=v.begin(); it!=v.end(); it++){
		cout<< *it << ", ";
	}
	cout << endl;

	return 0;
}

运行结果如下:

本教程示例代码下载请点此处。

时间: 2024-12-15 04:39:10

C++入门学习——标准模板库之vector的相关文章

C++入门学习——标准模板库之map

map 是 STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在 map 中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里简单说一下 map 内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在 map 内部所有的数据都是有序的,后边我们会见识到有序的好处. 那什么是一对一的数据映射?比如一个班级中,每个学生的学号跟他的姓

C++标准模板库之vector(Boolan)

vector是C++标准模板库中一种常见的容器,像数组类似,vector使用连续的存储空间用来保存元素,使用指针偏移可以快速的访问元素(通常认为是O1复杂度),与数组不同的是它的大小是可变的,在vector内部使用动态分配的内存保存元素,这意味着vector增长时需要重新分配内存,并将原来的原来的数据复制到该内存单元,需要很大的开销,因此vector并不会在每次新增元素时候都重新分配内存空间.vector实际容量(capacity)通常比实际大小(size)大得多.参考数据结构(C++语言版),

C++之路起航——标准模板库(vector)

vector(动态数组或向量):动态分配内存空间的线性储存结构. 需要包括头文件<vector> 定义: vector<数据类型> 变量名: Eg: vector<int> s; //定义了一个数据类型为整形的动态数组; 基本操作(红色标识为常用操作): s[i]直接以下标方式访问容器中的元素.       s.front()  返回首元素. s.back()  返回尾元素.   s.push_back(x)向表尾插入元素x. s.size()  返回表长.  s.em

C++标准模板库之vector

vector(向量容器),是 C++ 中十分有用一个容器.它能够像容器一样存放各种类型的对象,vector 是一个能够存放任意类型(类型可以是int, double, string, 还可以是类)的动态数组,能够增加和压缩数据. 使用 vector 之前,必须包含相应的头文件,vector 属于 std 命名域的,因此需要通过命名限定: #include <vector> using std::vector; //using namespace std; vector 对象的定义和初始化 ve

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门

C++ Primer(第五版)学习笔记_1_标准模板库--快速入门 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 标准模板库(STL)提供三种类型的组件:容器.迭代器和算法,他们都支持泛型程序设计标准. 容器主要有两类:顺序容器和关联容器.顺序容器(vector.list.deque和string等)是一系列元素的有序集合.关联容器(set.multiset.map和multimap)包含查找元素的键值. 迭代器的作用是遍历容器. STL算法库包含四类算法:排序算法.不可变序算法.变序性算法

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

C++ Primer(第五版)学习笔记_3_标准模板库vector(2)

C++ Primer(第五版)学习笔记_3_标准模板库vector(2) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 6.元素的插入 insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置. 要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标. #include <iostream> #include <vector> using namespa

C++ Primer(第五版)学习笔记_2_标准模板库vector(1)

C++ Primer(第五版)学习笔记_2_标准模板库vector(1) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 向量容器vector不但能像数组一样进行随机访问,还能在尾部插入元素,完全可以替代数组. 值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间. 容器vector的下标是从0开始的,如果vector容器的大小是n,则元素下标为0~n-1,这和数组的一样的.不一样的是,vector可以随时调整其大小. vector重要的方法有三个

C++标准模板库学习。。。

作为C++标准库相当重要的一部分,STL库提供一系列组件操作.它主要可以分为容器.迭代器.基本算法.函数对象以及内存分配器和配接器六个部分.整个STL库的代码都采用模板函数以及模板类的方式实现,具有高度的通用性.对于传统的应用程序来讲,模板库支持并且倡导一种新的编程风格,即称为泛型编程思想,以通用的模板方式来编写应用程序中的数据结构与算法. 16.1  STL常见容器 C++标准STL库中封装实现了常见数据结构,并以容器的方式提供给用户使用.STL容器主要包含vector向量.deque队列.l