在C++中,
vector
是一个动态数组,它是标准模板库(STL)提供的一个容器类。
vector
提供了一个可变大小的数组,可以在运行时根据需要自动调整大小。
要使用vector
,需要包含<vector>
头文件。以下是vector
的一些常见用法和特性:
- 创建
vector
对象:
#include <vector>
int main() {
// 创建一个空的vector
std::vector<int> myVector;
// 创建带有初始值的vector
std::vector<int> myVector = {1, 2, 3, 4, 5};
return 0;
}
- 添加元素到
vector
:
#include <vector>
int main() {
std::vector<int> myVector;
// 添加单个元素
myVector.push_back(10);
// 添加多个元素
myVector.push_back(20);
myVector.push_back(30);
return 0;
}
- 访问
vector
的元素:
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
// 使用下标访问元素
std::cout << myVector[0] << std::endl; // 输出:1
// 循环遍历动态数组
for (int i = 0 ; i < myVector.size(); i++) {
std::cout << myVector[i] << std::endl;
}
std::cout << std::endl;
return 0;
}
- 获取
vector
的大小和清空vector
:
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
// 获取vector的大小
std::cout << "Size: " << myVector.size() << std::endl;
// 清空vector
myVector.clear();
// 再次获取vector的大小
std::cout << "Size: " << myVector.size() << std::endl;
return 0;
}
vector
还提供了其他许多功能,例如插入、删除、排序等操作。
补充:
vector<pair<string, int>>
是一个存储 pair
对象的动态数组,其中每个 pair
对象包含一个字符串和一个整数。以下是 vector<pair<string, int>>
的相关讲解:
- 创建
vector<pair<string, int>>
对象:
#include <vector>
#include <utility>
int main() {
// 创建一个空的 vector<pair<string, int>>
std::vector<std::pair<std::string, int>> myVector;
// 创建带有初始值的 vector<pair<string, int>>
std::vector<std::pair<std::string, int>> myVector = {{"Alice", 25}, {"Bob", 30}};
return 0;
}
注:#include <utility>
这个头文件提供了一些实用的工具函数和类,主要用于提供对通用操作的支持。
<utility>
头文件中包含了以下重要的内容:
-
std::pair
:用于存储两个不同类型的值,并提供了访问和操作这两个值的方法。 -
std::make_pair
:一个模板函数,用于方便地创建pair
对象。
具体讲解:
pair
是一个标准库类型,用于存储两个不同类型的值。
std::make_pair
函数的语法如下:
template <class T1, class T2>
constexpr std::pair<T1, T2> make_pair(T1&& x, T2&& y);
该函数接受两个参数,分别是类型为 T1
和 T2
的值。它返回一个 pair<T1, T2>
对象,其中包含这两个值。
使用 std::make_pair
的示例:
#include <utility>
#include <iostream>
int main() {
std::pair<std::string, int> myPair1 = std::make_pair("Alice", 25);
std::pair<int, double> myPair2 = std::make_pair(42, 3.14);
std::cout << myPair1.first << ": " << myPair1.second << std::endl; // 输出:Alice: 25
std::cout << myPair2.first << ": " << myPair2.second << std::endl; // 输出:42: 3.14
return 0;
}
在上面的示例中,使用 std::make_pair
创建了两个 pair
对象:myPair1
和 myPair2
。第一个 pair
包含一个字符串和一个整数,第二个 pair
包含一个整数和一个双精度浮点数。
使用 std::make_pair
有以下几个优点:
- 不需要显式指定模板参数类型,编译器可以自动推断出类型。
- 使用
std::make_pair
更加简洁和清晰,避免了手动指定模板参数类型的繁琐。
需要注意的是,std::make_pair
创建的 pair
对象是通过值传递的,而不是通过引用传递。如果需要传递引用类型的值,可以使用直接构造 pair
对象的方式。
-
std::swap
:用于交换两个对象的值。 -
std::move
:用于将对象转移所有权,通常与移动语义一起使用。 -
std::forward
:用于完美转发,通常与模板函数和右值引用一起使用。
除了上述功能,<utility>
头文件还提供了其他一些实用的工具函数和类,用于支持泛型编程和通用算法。通过包含 <utility>
头文件,可以使用其中定义的功能,简化代码的编写并提高代码的可读性和可维护性。
需要注意的是,<utility>
头文件通常被其他标准库头文件隐式包含,例如 <vector>
、<map>
、<algorithm>
等。因此,在使用这些头文件时,无需显式包含 <utility>
。但是,如果只需要使用 <utility>
中的特定功能,可以单独包含它以避免不必要的头文件依赖。
- 添加元素到
vector<pair<string, int>>
:
#include <vector>
#include <utility> // for std::pair
int main() {
std::vector<std::pair<std::string, int>> myVector;
// 添加单个元素
myVector.push_back(std::make_pair("Alice", 25));
// 添加多个元素
myVector.push_back(std::make_pair("Bob", 30));
myVector.push_back(std::make_pair("Charlie", 35));
return 0;
}
- 访问
vector<pair<string, int>>
的元素:
#include <vector>
#include <utility> // for std::pair
#include <iostream>
int main() {
std::vector<std::pair<std::string, int>> myVector = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};
// 使用下标访问元素
std::cout << myVector[0].first << ": " << myVector[0].second << std::endl; // 输出:Alice: 25
return 0;
}
- 获取
vector<pair<string, int>>
的大小和清空:
#include <vector>
#include <utility> // for std::pair
#include <iostream>
int main() {
std::vector<std::pair<std::string, int>> myVector = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 35}};
// 获取 vector 的大小
std::cout << "Size: " << myVector.size() << std::endl;
// 清空 vector
myVector.clear();
// 再次获取 vector 的大小
std::cout << "Size: " << myVector.size() << std::endl;
return 0;
}
vector<pair<string, int>>
可以方便地存储键值对或相关的数据项,每个键值对由一个字符串和一个整数组成。通过 pair
对象,可以将两个不同类型的数据组合在一起,并将它们作为单个元素存储在 vector
中。可以根据需要对 vector<pair<string, int>>
进行插入、删除、排序等操作,并通过下标或迭代器访问其中的元素。