小言_互联网的博客

【C++】5-1.11 c++11的向量类std::vector

400人阅读  评论(0)

【C++】5-1.11 c++11的向量类std::vector

1、vector类与array类

关于c++11引入的array类,参考如下博客:
【C++】4-1.25 C++11的数组类std::array
https://blog.csdn.net/jn10010537/article/details/116669492

std::array数组对象,它的大小在编译阶段就确定了,容量大小不可变;
std::vector向量对象,它的容量可自动修改、增长;

2、vector类使用方法

vector向量是C++标准库里一种特殊的数据结构,可以看作是“动态数组”或者“不定长数组”的容器;
使用vector类,需要包含如下头文件:

#include<vector>

2.1、声明及定义vector对象

#include<vector>

// 声明vector对象
// 需要声明数组中存储的数据类型
// std::vector <数据类型> 动态数组名; 示例如下:
std::vector<int> vector_1(3, 0);

// 定义vector对象
//声明的时候可以一并赋初值,即定义;
//std::vector <数据类型> 动态数组名(num,somethiong);  //在M里装num个somethiong
std::vector<int> vector_2(5, 1);//在vector_2里装5个1;
std::vector<int> vector_3(5);   //在vector_3里装5个0;
std::vector<int> vector_4(vector_2);   //拷贝构造,创建一个和vector_2一样的动态数组;
std::vector<int> vector_5(vector_2.begin(),vector_2.end())//继承vector_2下标[0,B.end()]的值;
... ...

2.2、vector对象的基本操作
若vector类的实例化对象的名称为: vector_obj;

2.2-1、返回vector_obj[i]的值

vector_obj.at(i)  
vector_obj[i]   //像array数组一样使用下标访问元素

2.2-2、返回vector_obj数组元素总个数

vector_obj.size();

2.2-3、返回vector_obj数组第一个元素的值

vector_obj.front();

2.2-4、返回vector_obj数组最后一个元素的值

vector_obj.back();

2.2-5、清空vector_obj数组

vector_obj.clear();

2.2-6、返回vector_obj数组第一个数的地址

vector_obj.begin();

2.2-7、返回vector_obj数组最后一个数的地址

vector_obj.end();

2.2-8、判断vector_obj数组是否为空,是空则返回1,否则返回0;

vector_obj.empty();

2.2-9、两个动态数组元素互换

vector_obj.swap(vector_obj_2);
// 或者
swap(vector_obj,vector_obj_2)

2.2-10、返回vector_obj数组的长度

vector_obj.capacity();

2.2-11、将vector_obj数组的长度设为num

vector_obj.resize(num);

2.2-12、从vector_obj数组最后,追加元素

vector_obj.push_back(something);

2.2-13、从vector_obj数组最后,删除一个元素

vector_obj.pop_back();

2.2-14、移除vector_obj数组position位置的元素,注意参数为迭代器

vector_obj.erase(position)

// 删除倒数第2个元素
vector_obj.erase(vector_obj.end()-2)
//最后两个元素删掉
vector_obj.erase(vector_obj.end()-2,vector_obj.end())

2.2-15、在vector_obj数组position位置,插入一个元素

vector_obj.insert(vector_obj.begin(), "csdn");//索引0位置插入"csdn"

3、使用示例

以下示例:
vs2017社区版; Windows10; c++14标准;

#include<vector>
#include<iostream>
#include<string>

void out_print(int x,std::vector<std::string>str1)
{
   
	std::cout << ">>>[" << x << "]={ ";
	// 习惯上,迭代变量名应该用 i, j, k 等,其中变量名 j, k用于嵌套循环;
	for (auto i : str1)
	{
   
		std::cout << i << " , ";
	}
	std::cout <<"}"<< std::endl;
}


int main()
{
   
	// c++11的列表初始化方式,创建vector对象
	std::vector<std::string> str1{
    "jn","10","01","05","37" };
	out_print(1,str1);	

	// 删除元素,最后两个元素删掉
	// 接受迭代器参数
	str1.erase(str1.end()-2,str1.end());
	out_print(2,str1);	   

	// 追加元素
	str1.push_back("2021");
	str1.push_back("05");
	str1.push_back("23");
	str1.push_back("18:17");
	out_print(3,str1);

	//用迭代器拷贝str1的内容,以创建新的str2对象;
	std::vector<std::string> str2(str1.begin(),str1.end());
	out_print(4,str2);

	// 在str2中插入元素,参数是迭代器
	str2.insert(str2.begin(), "csdn");
	out_print(5,str2);

	// 用拷贝构造函数的方式创建str3
	std::vector<std::string> str3(str2);
	out_print(6,str3);

	// 用数组下标修改str3的内容
	str3[0] = "sunday";
	out_print(7, str3);

	// 创建str4,初始化为多个相同的字符串;
	std::vector<std::string> str4(3,"H__");
	out_print(8,str4);

	// 交换str4、str3
	str4.swap(str3);
	out_print(9, str4);
	out_print(10, str3);

	return 0;
}

运行如下:


转载:https://blog.csdn.net/jn10010537/article/details/117196920
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场