c++学习之 vector的基础用法

86 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天.

本文记录学习C++的 vector的相关知识

一、什么是vector

c++的vector你可以理解为一个容器,你可以往这个容器中放入东西,但是一个容器只能放同一种类型的东西,比如你这个容器是放字符型的就不能放整形数据。

二、vector的创建和初始化

include<iostream>
#include<vector>
using namespace std;

int main()
{
        vector<int> vec1;  //初始化容器,并规定类型为整形
        vector<char> vec2(3,'a'); //初始化容器,并放入3个字符 a
        vector<char> vec3(vec2); //初始化容器,并把vec2中的数据放到vec3里面去,内容和vec2一样
}

三、 vector的数据遍历

我们会用 vec.size() 来返回你这个vector有多少的数据,一般采用for循环进行遍历;

clude<vector>
using namespace std;

int main()
{
        vector<int> vec1;  //初始化容器,并规定类型为整形
        vector<char> vec2(3,'a'); //初始化容器,并放入3个字符 a
        vector<char> vec3(vec2); //初始化容器,并把vec2中的数据放到vec3里面去
        printf("11111111111111111\n");
        for(int a = 0; a < vec1.size(); a++) {
                cout << vec1[a] << endl;
        }
        printf("22222222222222222\n");
        for(int b = 0; b < vec2.size(); b++) {
                cout << vec2[b] << endl;
        }
        printf("33333333333333333\n");
        for(int c = 0; c < vec3.size(); c++) {
                cout << vec3[c] << endl;
        }
        printf("0000000000000000\n");
}

执行后的结果

xhh@cluo:~/study/misc$ g++ vector_study1.cpp 
xhh@cluo:~/study/misc$ ./a.out 
11111111111111111
22222222222222222
a
a
a
33333333333333333
a
a
a
0000000000000000

可以看到我们 vec1因为只是初始化没有放东西进去所以打出来是空的 vec2我们放了三个字符, vec3 拷贝的vec2都是一样的结果

四、 vector的数据放入

我们可以通过 push_back();的方式将对应的东西放到对应的容器里面

#include<iostream>
#include<vector>
using namespace std;

int main()
{
        vector<int> vec1;  //初始化容器,并规定类型为整形
        vector<char> vec2(3,'a'); //初始化容器,并放入3个字符 a
        vector<char> vec3(vec2); //初始化容器,并把vec2中的数据放到vec3里面去

        // 往 vec1中放入数据
        vec1.push_back(1);
        vec1.push_back(2);
        vec1.push_back(3);

        printf("11111111111111111\n");

        for(int a = 0; a < vec1.size(); a++) {
                cout << vec1[a] << endl;
        }

        printf("22222222222222222\n");

}

执行后的结果

xhh@cluo:~/study/misc$ g++ vector_study1.cpp 
xhh@cluo:~/study/misc$ ./a.out 
11111111111111111
1
2
3
22222222222222222

五、vector数据的清除

通过 pop_back(); 去清除现在vector容器中的最后一个数据(从末尾开始清除)。 通过 clear()来清除所有的数据,包括我们后续的所有数据。

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> vec1;  //初始化容器,并规定类型为整形
	vector<char> vec2(3, 'a'); //初始化容器
	vector<char> vec3(vec2); //初始化容器,并把vec2中的数据放到vec3里面去
	vector<char> vec4; //初始化容器

	// 往 vec1中放入数据
	vec1.push_back(1);
	vec1.push_back(2);
	vec1.push_back(3);	

	vec4.push_back('a');
	vec4.push_back('b');
	vec4.push_back('c');
	vec4.push_back('d');
	
	for(int a = 0; a < vec1.size(); a++) {
		cout << "vec1 =" << vec1[a] << endl;
	}	
	printf("============\n");
	vec2.pop_back();  // 清除vec2倒数第一个数据

	for(int b = 0; b < vec2.size(); b++) {
		cout << "vec2 =" << vec2[b] << endl;
	}	

	printf("============\n");
	vec3.clear(); // 清除 vec3中的所有数据

	for(int c = 0; c < vec3.size(); c++) {
		cout << "vec3 =" << vec3[c] << endl;
	}	

	
	printf("============\n");
	for(int d = 0; d < vec4.size(); d++) {
		cout << "vec4 =" <<vec4[d] << endl;
	}

	printf("============\n");
	vec4.pop_back();  // 清楚4的最后一个数据
	
	for(int d = 0; d < vec4.size(); d++) {
		cout << "after pop vec4 =" <<vec4[d] << endl;
	}	
}

执行后

xhh@cluo:~/study/misc$ g++ vector_study1.cpp 
xhh@cluo:~/study/misc$ ./a.out 
vec1 =1
vec1 =2
vec1 =3
============
vec2 =a
vec2 =a
============
============
vec4 =a
vec4 =b
vec4 =c
vec4 =d
============
after pop vec4 =a
after pop vec4 =b
after pop vec4 =c

六、判断是不是空容器

empty(); 用于判断是不是空的容器

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> vec1;  //初始化容器,并规定类型为整形
	vector<char> vec2(3, 'a'); //初始化容器
	vector<char> vec3(vec2); //初始化容器,并把vec2中的数据放到vec3里面去
	vector<char> vec4; //初始化容器

	// 往 vec1中放入数据
	vec1.push_back(1);
	vec1.push_back(2);
	vec1.push_back(3);	

	vec4.push_back('a');
	vec4.push_back('b');
	vec4.push_back('c');
	vec4.push_back('d');

	if ( vec1.empty() )
	{
		cout << "vec1 is empty!" << endl;
	}
	for(int a = 0; a < vec1.size(); a++) {
		cout << "vec1 =" << vec1[a] << endl;
	}	
	printf("============\n");
	vec2.pop_back();  // 清除vec2倒数第一个数据

	if ( vec2.empty() )
	{
		cout << "vec2 is empty!" << endl;
	}
	for(int b = 0; b < vec2.size(); b++) {
		cout << "vec2 =" << vec2[b] << endl;
	}	

	printf("============\n");
	vec3.clear(); // 清除 vec3中的所有数据
	if ( vec3.empty() )
	{
		cout << "vec3 is empty!" << endl;
	}
	for(int c = 0; c < vec3.size(); c++) {
		cout << "vec3 =" << vec3[c] << endl;
	}	

	
	printf("============\n");
	if ( vec4.empty() )
	{
		cout << "vec4 is empty!" << endl;
	}
	for(int d = 0; d < vec4.size(); d++) {
		cout << "vec4 =" <<vec4[d] << endl;
	}

	printf("============\n");
	vec4.pop_back(); 
	if ( vec4.empty() )
	{
		cout << "vec4 is empty!" << endl;
	}
	for(int d = 0; d < vec4.size(); d++) {
		cout << "after pop vec4 =" <<vec4[d] << endl;
	}	
}

执行后

hh@cluo:~/study/misc$ g++ vector_study1.cpp 
xhh@cluo:~/study/misc$ ./a.out 
vec1 =1
vec1 =2
vec1 =3
============
vec2 =a
vec2 =a
============
vec3 is empty!
============
vec4 =a
vec4 =b
vec4 =c
vec4 =d
============
after pop vec4 =a
after pop vec4 =b
after pop vec4 =c