元素访问
1. at(pos)
返回对 pos
位置元素的引用,并使用边界检查。如果 pos
不在容器的范围内,则抛出 std::out_of_range
类型的例外。
复杂性是常数 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr;
// write values
arr.at(0) = 2;
arr.at(1) = 4;
arr.at(2) = 6;
// read values
int a = arr.at(0); // a is now 2
int b = arr.at(1); // b is now 4
int c = arr.at(2); // c is now 6
return 0;
}
2)operator[pos]
返回对 pos
位置的元素的引用,不进行边界检查。如果 pos
不在容器的范围内,则可能发生运行时分段违规错误。此方法提供与经典数组等效的元素访问,并且比 at(pos)
更有效。
复杂性是常数 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr;
// write values
arr[0] = 2;
arr[1] = 4;
arr[2] = 6;
// read values
int a = arr[0]; // a is now 2
int b = arr[1]; // b is now 4
int c = arr[2]; // c is now 6
return 0;
}
3)std::get<pos>
此非成员函数返回对编译时常量位置 pos
的元素的引用,而不进行边界检查。如果 pos
不在容器范围内,则可能发生运行时分段违例错误。
复杂性是常数 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr;
// write values
std::get<0>(arr) = 2;
std::get<1>(arr) = 4;
std::get<2>(arr) = 6;
// read values
int a = std::get<0>(arr); // a is now 2
int b = std::get<1>(arr); // b is now 4
int c = std::get<2>(arr); // c is now 6
return 0;
}
4)front()
返回对容器中第一个元素的引用。在空容器上调用 front()
是不确定的。
复杂性是常数 O(1)
。
注意: 对于容器 c,表达式 c.front()
相当于*c.begin()
。
#include <array>
int main()
{
std::array<int, 3> arr{ 2, 4, 6 };
int a = arr.front(); // a is now 2
return 0;
}
5)back()
返回对容器中最后一个元素的引用。在空容器上调用 back()
是未定义的。
复杂性是常数 O(1)
。
#include <array>
int main()
{
std::array<int, 3> arr{ 2, 4, 6 };
int a = arr.back(); // a is now 6
return 0;
}
6)data()
返回指向用作元素存储的基础数组的指针。指针使得 range [data(); data() + size())
始终是有效范围,即使容器为空(在这种情况下 data()
不可解除引用)。
复杂性是常数 O(1)
。
#include <iostream>
#include <cstring>
#include <array>
int main ()
{
const char* cstr = "Test string";
std::array<char, 12> arr;
std::memcpy(arr.data(), cstr, 12); // copy cstr to arr
std::cout << arr.data(); // outputs: Test string
return 0;
}