【C++】蓝桥必备-STL<Part 1-vector>

136 阅读3分钟

一、什么是STL

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

——百度

二、STL知识点总结

1、vector 【可变数组】

① 头文件 #include <vector>

② 初始化

#include <iostream>
#include <vector>

using namespace std;

int main(){
	//vector<int> a;  //定义一个vector未初始化,输出->空 
	
	//vector<int> a(3);  //定义一个长度为3的vector  未初始化 输出->0 0 0
	
	//vector<int> a(10, 3);  //定义一个长度为10,且每个数赋值为->3
	
	int b[7] = {1,2,3,4,5,6,7};
	vector<int>a(b,b+7);  // 定义一个a数组,将b的前七个值赋给a,输出->1,2,3,4,5,6,7 
	
	for (auto x: a){
		std::cout << x << " " << endl;  // std:命名空间 endl:换行 
	}
	
	return 0;
	
}

③ size() 求数组大小

std::cout << "返回a数组元素个数:" <<  a.size() << endl;  // 输出返回a数组元素个数:7

④ resize 改变数组大小

a.resize(10); 
std::cout << "返回a数组元素个数:" <<  a.size() << endl;  // 10

image.png

①至④运行截图

⑤ empty() 判断数组是否为空

vector<int> c;
std::cout << "数组是否为空(空:1;非空:0):" << c.empty() << endl;  // 1

⑥ front()和 back() 第一个字符;最后一个字符

std::cout << "第一个字符" << a.front() << ";" << "最后一个字符" << a.back() << endl;  //第一个字符1;最后一个字符0

⑧ clear() 清空数组

a.clear();
std::cout << "返回a数组元素个数:" <<  a.size() << endl; // 0

image.png

⑤至⑧运行截图

⑨ 支持比较运算

比较操作==,!=,<,<,<=,>,>=
     比较原则:根据最前面的数值大小判断,若一样就往后比较

⑩ push_back()和pop_back() 向数组最后一个追加、删除一个元素

// a数组原有的元素为1,2,3,4,5,6,7,0,0,0
a.pop_back();
	a.push_back(5);
	for (auto x: a){
		std::cout << x << " ";
	}

⑪ begin()和end() 返回数组角标为0的数和最后一个数

     注:需调用#include <algorithm>

⑫ 遍历vector的三种方法

//三种遍历vector的方法
	std::cout << endl << "第1种:"; 
    for (int i = 0; i < a.size(); i ++) {
        std::cout << a[i] << ' ';  //第1种:1 2 3 4 5 6 7 0 0 5
    }
    std::cout << endl;
    
	std::cout << "第2种:"; 
    for (auto i = a.begin(); i != a.end(); i ++) {
        std::cout << *i << ' ';  //第2种:1 2 3 4 5 6 7 0 0 5
    }
    std::cout << endl;

    //C++11的新语法
    std::cout << "第3种:";
    for (auto x : a) {
        std::cout << x << ' ';  //第3种:1 2 3 4 5 6 7 0 0 5
    }

⑬ 结合算法erase() reverse()

#include<algorithm>

vector<int> d = {1,2,3,4,5};
reverse(d.begin(),d.end());
for(auto x:d){
    std::cout << x << ' ';  // 5 4 3 2 1
    }
std::cout << endl;

image.png

⑩ 至⑬ 运行截图

附全文代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
	//vector<int> a;  //定义一个vector未初始化,输出->空 
	
	//vector<int> a(3);  //定义一个长度为3的vector  未初始化 输出->0 0 0
	
	//vector<int> a(10, 3);  //定义一个长度为10,且每个数赋值为->3
	
	int b[7] = {1,2,3,4,5,6,7};
	vector<int>a(b,b+7);  // 定义一个a数组,将b的前七个值赋给a,输出->1,2,3,4,5,6,7 
	
	for (auto x: a){
		std::cout << x << " ";  // std:命名空间 endl:换行 
	}
	
	std::cout << endl << "返回a数组元素个数:" <<  a.size() << endl;
	
	a.resize(10); 
	std::cout << "返回a数组元素个数:" <<  a.size() << endl;
	
	vector<int> c;
	std::cout << "数组是否为空(空:1;非空:0):" << c.empty() << endl;
	
	std::cout << "第一个字符" << a.front() << ";" << "最后一个字符" << a.back() << endl;
	
	//a.clear();
	std::cout << "返回a数组元素个数:" <<  a.size() << endl;
	
	a.pop_back();
	a.push_back(5);
	for (auto x: a){
		std::cout << x << " ";
	}
	
	//三种遍历vector的方法
	std::cout << endl << "第1种:"; 
    for (int i = 0; i < a.size(); i ++) {
        std::cout << a[i] << ' ';
    }
    std::cout << endl;
    
	std::cout << "第2种:"; 
    for (auto i = a.begin(); i != a.end(); i ++) {
        std::cout << *i << ' ';
    }
    std::cout << endl;

    //C++11的新语法
    std::cout << "第3种:";
    for (auto x : a) {
        std::cout << x << ' ';
    }
    std::cout << endl;
    
    vector<int> d = {1,2,3,4,5};
    reverse(d.begin(),d.end());
    for(auto x:d){
    	std::cout << x << ' ';
	}
	std::cout << endl;
	return 0;
	
}