vector的用法

vector的用法

1、构造函数

cpp 复制代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;


namespace std
{
	//vector作为一个管理 动态增长数组(可以是各种类型的数据) 的类。

	void test_vector1()
	{
		vector<int> v1;
		vector<int> v2(10,1);
		vector<int> v3(v2);
	}

2、遍历vector

cpp 复制代码
void test_vector2()
	{
		vector<int> v1;
		v1.push_back(1);
		v1.push_back(2);
		v1.push_back(3);
		v1.push_back(4);

		//访问vector中的数据(方式)
		//(1)下标+[]
		for (size_t i=0;i<v1.size();++i)
		{
			v1[i]++;
		}

		for (size_t i = 0; i < v1.size(); ++i)
		{
			cout<< v1[i] <<" ";
		}
		cout << endl;

		//(2)迭代器
		vector<int>::iterator it = v1.begin();
		while (it != v1.end())
		{
			(*it)--;
			cout<< *it <<" ";
			++it;
		}
		cout << endl;
		
	
	//(3)范围for
		for (auto e:v1)
		{
			cout<< e <<" ";
		}
		cout << endl;
	}

3、测试 vector 的默认扩容机制

cpp 复制代码
void TestVectorExpand()
	{
		size_t sz;
		vector<int> v;

		//v.resize(100); //不仅开了100个空间,而且初始化(赋值)了
		v.reserve(100); //提前开好100个空间
		sz = v.capacity();
		cout <<"making v grow:\n";
		for (int i=0;i<100;++i)
		{
			v.push_back(i);
			if (sz != v.capacity()) //之前的_capacity 不等于 扩容后的_capacity
			{
				sz = v.capacity();
				cout<< "capacity changed" << sz << '\n';
			}
		}
	}

	void test_vector3()
	{
		vector<int> v1;
		v1.push_back(1);
		v1.push_back(2);
		v1.push_back(3);
		v1.push_back(4);
		cout<< v1.max_size() <<endl;

		TestVectorExpand();
	}

4、vector的迭代器区间与插入、删除

cpp 复制代码
void test_vector4()
	{
		vector<int> v1;
		v1.push_back(1);
		v1.push_back(2);
		v1.push_back(3);
		v1.push_back(4);

		//迭代器区间 与 插入
		vector<int>::iterator pos = find(v1.begin(),v1.end(),3);  //在迭代器区间 [v1.begin(),v1.end()) 内查找 3
		if (pos != v1.end())  //这儿是检查
		{
			v1.insert(pos,30); //在迭代器类型的pos位置之前插入30
		}

		for (auto e:v1)
		{
			cout<< e <<" ";
		}
		cout << endl;

		//迭代器区间 与 删除
		pos = find(v1.begin(), v1.end(), 3);  //在迭代器区间 [v1.begin(),v1.end()) 内查找 3
		if (pos != v1.end())  //这儿是检查
		{
			v1.erase(pos); //删除pos位置的数
		}

		for (auto e : v1)
		{
			cout << e << " ";
		}
		cout << endl;
	}

5、vector的排序

cpp 复制代码
void test_vector5()
	{
		vector<int> v1;
		v1.push_back(9);
		v1.push_back(7);
		v1.push_back(8);
		v1.push_back(6);
		v1.push_back(14);
		v1.push_back(18);
		v1.push_back(16);
		v1.push_back(17);
		for (auto e : v1)
		{
			cout << e << " ";
		}
		cout << endl;

		sort(v1.begin(),v1.end()); //sort默认升序排列
		for (auto e : v1)
		{
			cout << e << " ";
		}
		cout << endl;

		less<int> ls; //仿函数--- STL里的sort就是默认用这个的(< 排升序)
		greater<int> gt; //(> 排降序)
		//sort(v1.begin(),v1.end(),gt);
		sort(v1.begin(), v1.end(), greater<int>());

		for (auto e : v1)
		{
			cout << e << " ";
		}
		cout << endl;

		
		string s("hello,1234564321");
		//s 是按照ascall码表来排序的
		sort(s.begin(),s.end()); //升序排列:<
		cout<< s <<endl;

		sort(s.begin(), s.end(),greater<char>()); //降序排列:>
		cout << s << endl;

	//附:vector<char> v 与 string str 的区别:数据结尾\0  +=  find  比较大小  to_string  <<  >>  
    //因此,vector<char> v 无法替代 string str 

		vector<string> strV;

		string str1("张三");
		strV.push_back(str1);
		strV.push_back(string("李四"));
		strV.push_back("王六");
		strV.push_back("赵七");

		for (const auto& str:strV) //不加引用前,将strV的元素逐个取出来赋值(由于每个元素都是string类,赋值需要深拷贝,代价太大)给str,然后再逐个打印str
		{                          //加入应用后,赋值的过程不再需要深拷贝,而是取别名,代价大大降低
			cout<< str <<endl;
		}

	// vector::push_back
	// void push_back(const T& val)
	// (1)引用: T -> int/string
	// (2) const引用:一方面保障传入的参数不可修改的特性;另一方面允许常量作为参数。
	
	}

}

int main()
{
	std::test_vector5();

	return 0;
}
相关推荐
oier_Asad.Chen2 小时前
【OI学习笔记】Floyed-Warshall算法解决传递闭包问题
c++·笔记·学习·算法·图论·最短路·传递闭包
zmzb01032 小时前
C++课后习题训练记录Day179
开发语言·c++
hansang_IR3 小时前
【题解】[COCI 2024/2025 #2] 流明 / Blistavost
c++·算法·动态规划·dp
不正经学生3 小时前
C语言指针进阶:const 和野指针——给指针加锁,向野指针宣战
c语言·开发语言·c++·算法·c#
程序喵大人3 小时前
【C++进阶】STL算法与函数对象 - 01 让算法去处理一段迭代器范围
开发语言·c++·算法·函数对象
旖旎夜光4 小时前
LeetCode 738:单调递增的数字(贪心算法) —— 题解
数据结构·c++·算法·leetcode·贪心算法
旖旎夜光4 小时前
LeetCode 1262:可被三整除的最大和 (贪心算法)—— 题解
数据结构·c++·算法·leetcode·贪心算法
蒸蒸yyyyzwd4 小时前
cpp 选手转 ai infra 后端秋招学习笔记 day1
c++·transformer
A_cainiao_A5 小时前
【ggml系列】【第四篇】ggml_graph_compute 多线程计算引擎与算子分发源码深度解析
开发语言·c++·矩阵
影视飓风TIM5 小时前
C++ STL 完整入门笔记[9]:C++ 仿函数、priority_queue与STL算法底层笔记
数据结构·c++·笔记