从零开始的STL生活
目录
array
头文件
#include <array>
std::array<int, 6> arr{1, 2, 3, 4, 5, 6};
// 设置元素
arr.at(1) = 10;
// 访问元素
std::cout << arr.at(1) << std::endl; // 输出 10
// 越界则抛出 std::out_of_range 类型的异常
try {
arr.at(10) = 100;
} catch (const std::out_of_range& ex) {
std::cout << ex.what() << std::endl;
}
std::array<int, 6> arr{1, 2, 3, 4, 5, 6};
// 设置元素
arr[1] = 10;
// 访问元素
std::cout << arr[1] << std::endl; // 输出 10
std::array<int, 6> arr{1, 2, 3, 4, 5, 6};
// 访问第一个元素
std::cout << arr.front() << std::endl; // 输出 1
std::array<int, 6> arr{1, 2, 3, 4, 5, 6};
// 访问最后一个元素
std::cout << arr.back() << std::endl; // 输出 6
std::array<int, 5> arr{1, 2, 3, 4, 5};
// 返回一个指向底层连续存储的指针
// 使得范围[data(), data() + size()]始终为有效范围
int* p = arr.data();
for (int i = 0; i < arr.size(); i++)
{
std::cout << *(p + i) << " ";
}
std::cout << std::endl;
cbegin cend crbegin crend 为常量迭代器
std::array<int, 5> arr{1, 2, 3, 4, 5};
// 正向迭代器
for (auto it = arr.begin(); it != arr.end(); it++)
{
std::cout << *it << " ";
// 1 2 3 4 5
}
std::cout << std::endl;
// 反向迭代器
for (auto it = arr.rend() - 1; it != arr.rbegin() - 1; it--)
{
std::cout << *it << " ";
// 1 2 3 4 5
}
std::cout << std::endl;
std::array<int, 5> arr{1, 2, 3, 4, 5};
若容器为空则为 true,否则为 false
std::cout << std::boolalpha << "arr.empty() : " << arr.empty() << std::endl;
// arr.empty() : false
std::array<int, 5> arr{1, 2, 3, 4, 5};
std::cout << "arr.size() : " << arr.size() << std::endl;
// arr.size() : 5
std::array<int, 5> arr{1, 2, 3, 4, 5};
// 因为每个 std::array<T, N> 都是固定大小容器,故 max_size 返回的值等于 N(亦为 size() 所返回的值)。
std::cout << "arr.max_size() : " << arr.max_size() << std::endl;
// arr.max_size() : 5
std::array<int, 5> arr{1, 2, 3, 4, 5};
arr.fill(10);
for (auto it = arr.begin(); it!= arr.end(); it++)
{
std::cout << *it << " ";
// 10 10 10 10 10
}
std::cout << std::endl;
std::array<int, 5> arr1{1, 2, 3, 4, 5};
std::array<int, 5> arr2{10, 20, 30, 40, 50};
arr1.swap(arr2);
for (auto it = arr1.begin(); it!= arr1.end(); it++)
{
std::cout << *it << " ";
// 10 20 30 40 50
}
std::cout << std::endl;
for (auto it = arr2.begin(); it!= arr2.end(); it++)
{
std::cout << *it << " ";
// 1 2 3 4 5
}
std::cout << std::endl;
std::array<int, 5> arr{1, 2, 3, 4, 5};
// 设置值
// get返回值为引用
std::get<0>(arr) = 10;
// 访问值
std::cout << std::get<0>(arr) << std::endl; // 10
std::swap(std::array) 特化std::swap算法
std::array<int, 5> arr1{1, 2, 3, 4, 5};
std::array<int, 5> arr2{10, 20, 30, 40, 50};
std::swap(arr1, arr2);
for (auto it = arr1.begin(); it!= arr1.end(); it++)
{
std::cout << *it << " ";
// 10 20 30 40 50
}
std::cout << std::endl;
for (auto it = arr2.begin(); it!= arr2.end(); it++)
{
std::cout << *it << " ";
// 1 2 3 4 5
}
std::cout << std::endl;