目录
前言
我们新手小白在刷题时,写的代码往往冗长而臃肿,不够简洁高效,比如我就喜欢写屎山代码(狗头),这篇文章介绍了我刷题这几个月来积累和总结的一些函数和容器(目前只有浅浅的认识,还谈不上认知,但新手阶段应该够用啦),这些函数和容器能够帮助我们新手小白优化代码,提高代码的可读性。另外,有错误和不足的地方,欢迎大家指正与补充。
一、容器篇
1.vector动态数组
介绍:vector是一个动态数组,它可以在运行时根据需要自动调整大小。vector是C++标准库中的一个容器,提供了许多有用的方法和功能,使其成为处理动态数据集合的强大工具。
用法如下:
//创建vector
vector<int> a;//未给定长度
vector<int> a(n);//给定长度为n
//添加元素
a.push_back(b);//从尾部插入b这个元素
cin>>a[i];//从键盘输入一个元素插入到a[i]里(用于长度给定时)
a[i]=b;//直接赋值
//删除末尾元素
a.pop_back();
//获取大小
int len=a.size();
//遍历
for(int i=0;i<a.size();i++)
{
cout<<a[i]<<endl;
}
//数组拷贝
vector<int> a(b);//将b数组拷贝给a
a=b;//直接赋值也行
vector<int> a(b.begin(),b.end())//此方法可拷贝部分元素
//数组交换
a.swap(b);
2.string
介绍:string是一个非常常用的字符串类,它提供了一系列的成员函数和操作符来方便地处理字符串。使用sting类可以避免C风格字符串的一些问题,比如长度不可变、内存管理等。
用法如下:
// 创建
string str; // 创建一个空的字符串
string str1 = "Hello"; // 使用字符串字面值初始化
string str2("world"); // 使用构造函数初始化
// 字符串的拼接
string str1 = "Hello";
string str2 = "world";
string result = str1 + " " + str2; // 使用"+"操作符拼接字符串
string result2 = str1.append(" ").append(str2); // 使用append()函数拼接字符串
// 字符串的长度和访问
string str = "Hello";
len = str.length(); // 获取字符串的长度
char ch = str[0]; // 使用[]操作符访问字符串的字符
char ch2 = str.at(1); // 使用at( )函数访问字符串的字符
//字符串的查找和替换
string str = "Hello world";
size_t pos = str.find( "world");//查找子字符串的位置
str.replace(pos, 5,"C++");//替换子字符串
//字符串的比较 可以使用-=、!=、<、>、<=、>=等操作符来比较字符串的大小
//值得注意的是:在C++中,存储在string中的数字不能直接进行加减运算。因为string类型是一个字符序列,而不是数字类型。如果你想要对存储在string中的数字进行加减运算,你需要先将其转换为数字类型,然后再进行运算。
3.map
介绍:map 是一种关联容器,通常在编程中用于存储键值对,其中每个键都是唯一的,并且与对应的值相关联。在 C++ 中,map
是 <map> 头文件中的模板类.
用法:
//插入元素
map<std::string, int> m;
m["key1"] = 10; // 插入键为 "key1",值为 10 的元素
//查找元素
auto it = m.find("key1"); // 如果找到,it指向 ("key1", 10)
//删除元素
m.erase(it); // 删除找到的 "key1"
//遍历
for (auto it = m.begin(); it != m.end(); ++it) {
cout << it->first << ": " << it->second << "\n";
}
4.set
介绍:set 是一种关联容器,它按照元素值的自然顺序(对于可比较的类型)或自定义的比较函数来进行排序。set
实现了集合(或无序不重复元素集)的概念,其中每个元素都是唯一的,并且是有序的,这意味着你可以快速地查找、插入和删除元素(时间复杂度都是O(log n)),而不需要考虑它们在容器中的具体位置。
特点:
- 唯一性:容器中的每个元素都是唯一的,不允许重复。
- 排序:元素被存储在一个排序好的顺序中&#