序号 | 函数 & 描述 |
---|---|
1 | double cos(double); 该函数返回弧度角(double 型)的余弦。 |
2 | double sin(double); 该函数返回弧度角(double 型)的正弦。 |
3 | double tan(double); 该函数返回弧度角(double 型)的正切。 |
4 | double log(double); 该函数返回参数的自然对数。 |
5 | double pow(double, double); 假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。 |
6 | double hypot(double, double); 该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。 |
7 | double sqrt(double); 该函数返回参数的平方根。 |
8 | int abs(int); 该函数返回整数的绝对值。 |
9 | double fabs(double); 该函数返回任意一个浮点数的绝对值。 |
10 | double floor(double); 该函数返回一个小于或等于传入参数的最大整数。 |
基本特性:
vector
的大小可以根据需要自动增长和缩小。vector
中的元素在内存中是连续存储的,这使得访问元素非常快速。vector
可以被迭代,你可以使用循环(如 for
循环)来访问它的元素。vector
可以存储任何类型的元素,包括内置类型、对象、指针等。创建一个 vector 可以像创建其他变量一样简单:
std::vector myVector; // 创建一个存储整数的空 vector
这将创建一个空的整数向量,也可以在创建时指定初始大小和初始值:
std::vector myVector(5); // 创建一个包含 5 个整数的 vector,每个值都为默认值(0)
std::vector myVector(5, 10); // 创建一个包含 5 个整数的 vector,每个值都为 10
或:
std::vector vec; // 默认初始化一个空的 vector
std::vector vec2 = {1, 2, 3, 4}; // 初始化一个包含元素的 vector
可以使用 push_back 方法向 vector 中添加元素:
myVector.push_back(7); // 将整数 7 添加到 vector 的末尾
可以使用下标操作符 [] 或 at() 方法访问 vector 中的元素:
int x = myVector[0]; // 获取第一个元素
int y = myVector.at(1); // 获取第二个元素
v.back() 返回 v 中最后一个元素的引用
v.front() 返回 v 中第一个元素的引用
可以使用 size() 方法获取 vector 中元素的数量:
int size = myVector.size(); // 获取 vector 中的元素数量
可以使用迭代器遍历 vector 中的元素:
for (auto it = myVector.begin(); it != myVector.end(); ++it) {
std::cout << *it << " ";
}
或者使用范围循环:
for (int element : myVector) {
std::cout << element << " ";
}
可以使用 erase() 方法删除 vector 中的元素:
myVector.erase(myVector.begin() + 2); // 删除第三个元素
pop_back()
删除尾元素
可以使用 clear() 方法清空 vector 中的所有元素:
myVector.clear(); // 清空 vector
标准的输入输出操作如cin或cout就不再这里赘述了
std::istream
:用于输入操作的抽象基类。std::ostream
:用于输出操作的抽象基类。std::iostream
:继承自std::istream
和std::ostream
,用于同时进行输入和输出操作。std::cin
:标准输入流对象,通常与键盘关联。std::cout
:标准输出流对象,通常与屏幕关联。std::cerr
:标准错误输出流对象,不带缓冲,通常与屏幕关联。std::clog
:标准日志流对象,带缓冲,通常与屏幕关联。>>
:输入操作符,从输入流读取数据。<<
:输出操作符,将数据写入输出流。可以检查输入输出流的状态,以确定操作是否成功。
#include
int main() {
int num;
std::cout << "Enter a number: ";
std::cin >> num;
// 检查输入操作是否成功
if (std::cin.fail()) {
std::cerr << "Invalid input!" << std::endl;
} else {
std::cout << "You entered: " << num << std::endl;
}
return 0;
}
使用std::getline
函数可以读取包含空格的整行输入。
#include
#include
int main() {
std::string fullName;
std::cout << "Enter your full name: ";
std::getline(std::cin, fullName);
std::cout << "Hello, " << fullName << "!" << std::endl;
return 0;
}
sstream
是 C++ 标准库中的一个组件,它提供了一种方便的方式来处理字符串流(可以像处理流一样处理字符串)。
允许你将字符串当作输入/输出流来使用,这使得从字符串中读取数据或将数据写入字符串变得非常简单。
sstream
是 C++ 标准库中的一个命名空间,它包含了几个类,用于处理字符串流,这些类包括:
istringstream
:用于从字符串中读取数据。ostringstream
:用于将数据写入字符串。stringstream
:是istringstream
和ostringstream
的组合,可以同时进行读取和写入操作。下面是一个使用 istringstream
从字符串中读取整数和浮点数的例子:
#include
#include
int main() {
std::string data = "10 20.5";
std::istringstream iss(data);
int i;
double d;
iss >> i >> d;
std::cout << "Integer: " << i << std::endl;
std::cout << "Double: " << d << std::endl;
return 0;
}
输出结果:
Integer: 10
Double: 20.5
下面是一个使用 ostringstream
将数据写入字符串的例子:
#include
#include
int main() {
std::ostringstream oss;
int i = 100;
double d = 200.5;
oss << i << " " << d;
std::string result = oss.str();
std::cout << "Resulting string: " << result << std::endl;
return 0;
}
输出结果:
Resulting string: 100 200.5
下面是一个使用 stringstream
同时进行读取和写入操作的例子:
#include
#include
int main() {
std::string data = "30 40.5";
std::stringstream ss(data);
int i;
double d;
// 从stringstream读取数据
ss >> i >> d;
std::cout << "Read Integer: " << i << ", Double: " << d << std::endl;
// 向stringstream写入数据
ss.str(""); // 清空stringstream
ss << "New data: " << 50 << " " << 60.7;
std::string newData = ss.str();
std::cout << "New data string: " << newData << std::endl;
return 0;
}
输出结果:
Read Integer: 30, Double: 40.5
New data string: New data: 50 60.7
C++ 标准库提供了丰富的功能,其中
是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。
是 C++ 标准模板库(STL)中的一个序列容器,它允许在容器的任意位置快速插入和删除元素。与数组或向量(
)不同,
不需要在创建时指定大小,并且可以在任何位置添加或删除元素,而不需要重新分配内存。
以下是
容器的一些基本操作:
#include
std::list mylist;
,其中 T
是存储在列表中的元素类型。mylist.push_back(value);
mylist.pop_back();
或 mylist.erase(iterator);
mylist.front();
和 mylist.back();
for (auto it = mylist.begin(); it != mylist.end(); ++it)
在 C++ 中,标准库提供了多种容器和算法来帮助开发者更高效地编写程序。
是 C++ 标准模板库(STL)的一部分,它实现了一个后进先出(LIFO,Last In First Out)的数据结构。这种数据结构非常适合于需要"最后添加的元素最先被移除"的场景。
容器适配器提供了一个栈的接口,它基于其他容器(如 deque
或 vector
)来实现。栈的元素是线性排列的,但只允许在一端(栈顶)进行添加和移除操作。
push()
: 在栈顶添加一个元素。pop()
: 移除栈顶元素。top()
: 返回栈顶元素的引用,但不移除它。empty()
: 检查栈是否为空。size()
: 返回栈中元素的数量。C++ 标准库中的
头文件提供了队列(Queue)数据结构的实现。队列是一种先进先出(FIFO, First In First Out)的数据结构,它允许在一端添加元素(称为队尾),并在另一端移除元素(称为队首)。
队列是一种线性数据结构,它遵循以下规则:
在 C++ 中,队列的语法如下:
#include
// 声明队列
std::queue q;
这里 Type
是队列中存储元素的数据类型。
队列提供了以下常用操作:
empty()
: 检查队列是否为空。size()
: 返回队列中的元素数量。front()
: 返回队首元素的引用。back()
: 返回队尾元素的引用。push()
: 在队尾添加一个元素。pop()
: 移除队首元素。在 C++中,
是标准模板库(STL)的一部分,它提供了双端队列(double-ended queue)的实现。双端队列是一种允许在两端进行插入和删除操作的线性数据结构。
的全称是 “double-ended queue”,它在C++中以模板类的形式存在,允许存储任意类型的数据。
是一个动态数组,它提供了快速的随机访问能力,同时允许在两端进行高效的插入和删除操作。这使得
成为处理需要频繁插入和删除元素的场景的理想选择。
在 C++ 中,使用
需要包含头文件 #include
。以下是
的基本语法:
#include
#include
int main() {
std::deque myDeque; // 创建一个整数类型的双端队列
// 接下来可以进行插入、删除等操作
return 0;
}
push_back()
: 在队列尾部添加一个元素。push_front()
: 在队列头部添加一个元素。pop_back()
: 删除队列尾部的元素。pop_front()
: 删除队列头部的元素。[]
可以访问队列中的元素,例如 myDeque[0]
访问第一个元素。size()
: 返回队列中的元素数量。empty()
: 检查队列是否为空。在 C++ 中, 是标准模板库(STL)的一部分,它提供了一种关联容器,用于存储键值对(key-value pairs)。
map
容器中的元素是按照键的顺序自动排序的,这使得它非常适合需要快速查找和有序数据的场景。
map
存储的是键值对,其中每个键都是唯一的。map
中的元素按照键的顺序自动排序,通常是升序。map
中只能出现一次。map
提供了双向迭代器,可以向前和向后遍历元素。包含头文件:
#include
声明 map 容器:
std::map myMap;
key_type
是键的类型。value_type
是值的类型。插入元素:
myMap[key] = value;
访问元素:
value = myMap[key];
遍历 map:
for (std::map::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << " => " << it->second << std::endl;
}
在 C++ 中,
是标准模板库(STL)的一部分,提供了一种基于哈希表的键值对容器。
与 std::map
不同,unordered_map
不保证元素的排序,但通常提供更快的查找速度。
unordered_map
是一个关联容器,它存储了键值对(key-value pairs),其中每个键(key)都是唯一的。unordered_map
使用哈希表来存储元素,这使得它在查找、插入和删除操作中具有平均常数时间复杂度。
以下是 unordered_map
的基本语法:
#include
std::unordered_map map_name;
key_type
是键的类型。value_type
是值的类型。unordered_map
可以以多种方式构造:
// 默认构造
std::unordered_map myMap;
// 构造并初始化
std::unordered_map myMap = {{1, "one"}, {2, "two"}};
// 构造并指定初始容量
std::unordered_map myMap(10);
// 构造并复制另一个 unordered_map
std::unordered_map anotherMap = myMap;
插入元素:
myMap.insert({3, "three"});
访问元素:
std::string value = myMap[1]; // 获取键为1的值
删除元素:
myMap.erase(1); // 删除键为1的元素
查找元素:
auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end()) {
std::cout << "Found: " << it->second << std::endl;
}
C++ 标准库中的
是一个关联容器,它存储了一组唯一的元素,并按照一定的顺序进行排序。
提供了高效的元素查找、插入和删除操作。它是基于红黑树实现的,因此具有对数时间复杂度的查找、插入和删除性能。
容器中存储的元素类型必须满足以下条件:
包含头文件:
#include
声明 set 容器
std::set<元素类型> 容器名;
insert(元素)
: 插入一个元素。erase(元素)
: 删除一个元素。find(元素)
: 查找一个元素。size()
: 返回容器中元素的数量。empty()
: 检查容器是否为空。C++ 标准库(Standard Template Library, STL)是 C++ 的核心组成部分之一,提供了丰富的数据结构和算法。
是 C++ 标准库中用于处理字符串的头文件。
在 C++ 中,字符串是由字符组成的序列。
头文件提供了 std::string
类,它是对 C 风格字符串的封装,提供了更安全、更易用的字符串操作功能。
要在 C++ 程序中使用
库,首先需要包含这个头文件:
#include
#include
std::string
类的基本语法如下:
声明字符串变量:
std::string str;
初始化字符串:
std::string str = "Hello, World!";
使用 +
连接字符串:
std::string str1 = "Hello, ";
std::string str2 = "World!";
std::string result = str1 + str2;
std::string
类提供了许多成员函数来操作字符串,以下是一些常用的成员函数:
size()
:返回字符串的长度。empty()
:检查字符串是否为空。operator[]
:通过索引访问字符串中的字符。substr()
:获取子字符串。find()
:查找子字符串在主字符串中的位置。replace()
:替换字符串中的某些字符。C++ 标准库中的
头文件提供了一组用于操作容器(如数组、向量、列表等)的算法。这些算法包括排序、搜索、复制、比较等,它们是编写高效、可重用代码的重要工具。
头文件定义了一组模板函数,这些函数可以应用于任何类型的容器,只要容器支持迭代器。这些算法通常接受两个或更多的迭代器作为参数,表示操作的起始和结束位置。
大多数
中的函数都遵循以下基本语法:
algorithm_name(container.begin(), container.end(), ...);
这里的 container
是一个容器对象,begin()
和 end()
是容器的成员函数,返回指向容器开始和结束的迭代器。
函数:sort
定义:对容器中的元素进行排序。
语法:
sort(container.begin(), container.end(), compare_function);
其中 compare_function 是一个可选的比较函数,用于自定义排序方式。
#include
#include
#include
int main() {
std::vector<int> numbers = {5, 2, 9, 1, 5, 6};
std::sort(numbers.begin(), numbers.end());
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
函数:find
定义:在容器中查找与给定值匹配的第一个元素。
语法:
auto it = find(container.begin(), container.end(), value);
如果找到,it 将指向匹配的元素;如果没有找到,it 将等于 container.end()。
#include
#include
#include
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
auto it = std::find(numbers.begin(), numbers.end(), 3);
if (it != numbers.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Value not found." << std::endl;
}
return 0;
}
函数:copy
定义:将一个范围内的元素复制到另一个容器或数组。
语法:
copy(source_begin, source_end, destination_begin);
#include
#include
#include
int main() {
std::vector<int> source = {1, 2, 3, 4, 5};
int destination[5];
std::copy(source.begin(), source.end(), destination);
for (int i = 0; i < 5; ++i) {
std::cout << destination[i] << " ";
}
std::cout << std::endl;
return 0;
}
函数:equal
定义:比较两个容器或两个范围内的元素是否相等。
语法:
bool result = equal(first1, last1, first2);
或
bool result = equal(first1, last1, first2, compare_function);
#include
#include
#include
int main() {
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {1, 2, 3, 4, 5};
bool are_equal = std::equal(v1.begin(), v1.end(), v2.begin());
std::cout << (are_equal ? "Vectors are equal." : "Vectors are not equal.") << std::endl;
return 0;
}