C++语言的标准库(STL)
容器(Containers)
-
vector:动态数组,可以动态增长和收缩,支持快速随机访问元素。
-
list:双向链表,支持在任意位置快速插入和删除元素。
-
map:关联容器,以键值对(key-value)形式存储元素,支持快速查找和插入。
-
竞赛常用C++ STL 用法 https://io.zouht.com/154.html
vector VS. list VS. deque:
a、若需要随机访问操作,则选择vector;
b、若已经知道需要存储元素的数目,则选择vector;
c、若需要随机插入/删除(不仅仅在两端),则选择list
d、只有需要在首端进行插入/删除操作的时候,还要兼顾随机访问效率,才选择deque,否则都选择vector。
e、若既需要随机插入/删除,又需要随机访问,则需要在vector与list间做个折中-deque。
f、当要存储的是大型负责类对象时,list要优于vector;当然这时候也可以用vector来存储指向对象的指针,
同样会取得较高的效率,但是指针的维护非常容易出错,因此不推荐使用。
示例:使用vector容器存储整数,并遍历输出
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 创建一个vector容器存储整数
vector<int> nums;
// 向vector容器中添加元素
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
nums.push_back(4);
nums.push_back(5);
// 遍历vector容器并输出元素
for (int i = 0; i < nums.size(); ++i) {
cout << nums[i] << " ";
}
cout << endl;
return 0;
}
示例:使用map容器存储键值对,并遍历输出
#include <iostream>
#include <map>
using namespace std;
int main() {
// 创建一个map容器存储键值对
map<string, int> scores;
// 向map容器中添加键值对
scores["Alice"] = 90;
scores["Bob"] = 85;
scores["Charlie"] = 95;
// 遍历map容器并输出键值对
for (auto it = scores.begin(); it != scores.end(); ++it) {
cout << it->first << ": " << it->second << endl;
}
return 0;
}
算法(Algorithms)
- sort:排序算法,用于对容器中的元素进行排序,如快速排序、归并排序等。
- find:查找算法,用于在容器中查找特定值或满足条件的元素。
示例:使用sort算法对vector容器中的整数进行排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 创建一个vector容器存储整数
vector<int> nums = {5, 2, 8, 1, 9, 3};
// 使用sort算法对vector容器中的整数进行排序
sort(nums.begin(), nums.end());
// 输出排序后的结果
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
示例:使用find算法在vector容器中查找指定元素
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 创建一个vector容器存储整数
vector<int> nums = {5, 2, 8, 1, 9, 3};
// 使用find算法在vector容器中查找指定元素
int target = 8;
auto it = find(nums.begin(), nums.end(), target);
if (it != nums.end()) {
cout << "Element found at index " << distance(nums.begin(), it) << endl;
} else {
cout << "Element not found" << endl;
}
return 0;
}
迭代器(Iterators)
- 迭代器是一种用于遍历容器中元素的对象,类似于指针,可以按顺序访问容器中的元素。
- 提供了多种类型的迭代器,如输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,支持不同类型的容器和操作。
其他
- 函数对象(Functors):可调用对象,类似于函数指针,用于实现自定义的算法和操作。
- 智能指针(Smart Pointers):用于管理动态分配的内存,如shared_ptr、unique_ptr和weak_ptr,提高了内存管理的安全性和可靠性。
STL的优势和作用
- 提高了开发效率:STL提供了丰富的容器和算法,避免了重复实现常用的数据结构和算法,极大地提高了开发效率。
- 提高了代码质量:STL中的容器和算法经过严格测试和优化,保证了其性能和稳定性,提高了代码的质量和可靠性。
- 提供了统一的接口:STL中的容器和算法都遵循了统一的接口规范,使得不同的数据结构和算法可以方便地进行组合和替换,提高了代码的灵活性和可维护性。
综上所述,C++语言的标准库(STL)提供了丰富而强大的容器、算法和迭代器等组件,极大地提高了开发效率和代码质量,成为C++程序员不可或缺的利器。
C语言与C++的区别
C和C++是两种广泛使用的编程语言,它们有许多相似之处,但也存在一些显著的区别。以下是对它们的详细比较和描述。
1. 历史和发展背景
- C语言:由丹尼斯·里奇(Dennis Ritchie)在1972年开发,是一种通用的过程式编程语言。C语言旨在提供一种简洁、高效的语言,用于系统编程和低级程序开发,如操作系统和嵌入式系统。
- C++语言:由比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)在1979年开发,最初称为“C with Classes”。C++是在C的基础上扩展的,增加了面向对象编程(OOP)特性。C++是一种多范式语言,支持过程式编程、面向对象编程和泛型编程。
2. 编程范式
- C语言:主要支持过程式编程(Procedural Programming),强调函数和过程调用,代码组织上以函数为基本单位。
- C++语言:支持多种编程范式,包括过程式编程、面向对象编程(OOP)和泛型编程。面向对象编程引入了类、对象、继承、多态、封装等概念。
3. 数据类型和结构
- C语言:提供基本数据类型(如int、char、float、double)和结构体(struct),支持共用体(union)和枚举(enum)。
- C++语言:继承了C的所有数据类型,并增加了类(class)和模板(template)等高级数据结构。类和对象是C++面向对象编程的基础。
4. 内存管理
- C语言:使用标准库函数如malloc、calloc、realloc和free进行动态内存分配和释放,手动管理内存。
- C++语言:除了支持C语言的内存管理函数外,还引入了运算符new和delete用于动态内存分配和释放,更加简洁和安全。
5. 输入输出
- C语言:使用标准输入输出库函数,如printf、scanf、fgets、fputs等。
- C++语言:引入了标准输入输出流库,如iostream中的cin、cout、cerr等,提供了更高级和方便的输入输出操作。
6. 函数和方法
- C语言:函数是独立的代码单元,通过函数指针实现回调或多态性。
- C++语言:支持函数重载(Overloading)和内联函数(Inline Function)。类中的函数称为方法(Method),可以是成员函数、静态函数或虚函数(Virtual Function)。
7. 面向对象编程
- C语言:不支持面向对象编程,但可以通过结构体和函数指针模拟。
- C++语言:全面支持面向对象编程,引入了类(class)、对象(object)、继承(inheritance)、多态(polymorphism)和封装(encapsulation)等概念。
8. 泛型编程
- C语言:没有直接支持泛型编程,可以通过宏定义和void指针实现有限的泛型操作。
- C++语言:引入模板(template)机制,实现类型安全的泛型编程,支持函数模板和类模板。
9. 标准库
- C语言:标准库相对简单,包括标准输入输出、字符串处理、数学运算、内存管理等基本功能。
- C++语言:标准库(STL,Standard Template Library)更加丰富和强大,包含容器(如vector、list、map)、算法(如sort、find)、迭代器(Iterator)等,极大地提高了开发效率。
10. 异常处理
- C语言:没有内置的异常处理机制,通常通过返回错误码或设置全局错误变量处理错误。
- C++语言:引入了异常处理机制(try、catch、throw),提供结构化的错误处理方式。
11. 命名空间
- C语言:没有命名空间,名称冲突需要通过命名约定或作用域规则避免。
- C++语言:引入了命名空间(namespace),可以有效避免名称冲突,组织和管理代码更加灵活。
示例代码对比
C语言版本
#include <stdio.h>
#include <stdlib.h>
void printMessage() {
printf("Hello, C!\n");
}
int main() {
printMessage();
return 0;
}
C++语言版本
#include <iostream>
using namespace std;
void printMessage() {
cout << "Hello, C++!" << endl;
}
int main() {
printMessage();
return 0;
}
- 在C++版本中,使用了iostream库和cout进行输出,而不是C语言的stdio.h库和printf函数。
- namespace std的使用使得在使用cout和endl时不需要加std::前缀。
通过以上对比,可以看出C和C++在语法、功能和编程范式上的一些显著区别。C语言简洁高效,适用于系统编程和嵌入式开发;而C++则功能强大,支持多范式编程,适用于大型软件系统的开发。理解这些区别有助于在实际开发中选择合适的编程语言和工具。
标签:容器,nums,STL,C++,C语言,vector,include From: https://www.cnblogs.com/zhouhongyuan/p/18209640