定义于头文件 <deque>
std::deque
元素访问
访问指定的元素,同时进行越界检查
std::deque<T,Allocator>::at
reference at( size_type pos ); |
const_reference at( size_type pos ) const; |
返回位于指定位置 pos
的元素的引用,有边界检查。
若 pos
不在容器范围内,则抛出 std::out_of_range 类型的异常。
参数
pos | - | 要返回的元素的位置 |
返回值
到所需元素的引用。
异常
若 !(pos < size()) 则抛出 std::out_of_range
复杂度
常数。
调用示例
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
size_t count = deque1.size();
for (size_t index = 0; index < count; index ++)
{
//返回位于指定位置 pos 的元素的引用,有边界检查。
std::cout << deque1.at(index) << " ";
}
std::cout << std::endl;
输出
访问指定的元素
std::deque<T,Allocator>::operator[]
reference operator[]( size_type pos ); |
const_reference operator[]( size_type pos ) const; |
返回位于指定位置 pos
的元素的引用。不进行边界检查。
参数
pos | - | 要返回的元素的位置 |
返回值
到所需元素的引用。
复杂度
常数。
注意
不同于 std::map::operator[] ,此运算符决不插入新元素到容器。
调用示例
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
size_t count = deque1.size();
for (size_t index = 0; index < count; index ++)
{
//返回位于指定位置 pos 的元素的引用,有边界检查。
std::cout << deque1[index] << " ";
}
std::cout << std::endl;
输出
访问第一个元素
std::deque<T,Allocator>::front
reference front(); |
const_reference front() const; |
返回到容器首元素的引用。
在空容器上对 front
的调用是未定义的。
参数
(无)
返回值
到首元素的引用
复杂度
常数
注意
对于容器 c
,表达式 c.front() 等价于 *c.begin() 。
调用示例
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<Cell>(std::cout, " "));
std::cout << std::endl;
std::cout << "front: " << deque1.front() << std::endl;
std::cout << "back: " << deque1.back() << std::endl;
访问最后一个元素
std::deque<T,Allocator>::back
reference back(); |
const_reference back() const; |
返回到容器中最后一个元素的引用。
在空容器上对 back
的调用是未定义的。
参数
(无)
返回值
到最后元素的引用。
复杂度
常数。
注意
对于容器 c
,表达式 return c.back(); 等价于 { auto tmp = c.end(); --tmp; return *tmp; }
调用示例
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<Cell>(std::cout, " "));
std::cout << std::endl;
std::cout << "front: " << deque1.front() << std::endl;
std::cout << "back: " << deque1.back() << std::endl;
输出
调用示例
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <time.h>
using namespace std;
struct Cell
{
int x;
int y;
Cell &operator +=(const Cell &cell)
{
x += cell.x;
y += cell.y;
return *this;
}
Cell &operator +(const Cell &cell)
{
x += cell.x;
y += cell.y;
return *this;
}
Cell &operator *(const Cell &cell)
{
x *= cell.x;
y *= cell.y;
return *this;
}
Cell &operator ++()
{
x += 1;
y += 1;
return *this;
}
bool operator <(const Cell &cell) const
{
if (x == cell.x)
{
return y < cell.y;
}
else
{
return x < cell.x;
}
}
bool operator ==(const Cell &cell) const
{
return x == cell.x && y == cell.y;
}
};
std::ostream &operator<<(std::ostream &os, const Cell &cell)
{
os << "{" << cell.x << "," << cell.y << "}";
return os;
}
int main()
{
std::mt19937 g{std::random_device{}()};
srand((unsigned)time(NULL));;
std::cout << std::boolalpha;
auto generate = []()
{
int n = std::rand() % 10;
Cell cell{n, n};
return cell;
};
{
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
size_t count = deque1.size();
for (size_t index = 0; index < count; index ++)
{
//返回位于指定位置 pos 的元素的引用,有边界检查。
std::cout << deque1.at(index) << " ";
}
std::cout << std::endl;
std::cout << std::endl;
}
{
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
size_t count = deque1.size();
for (size_t index = 0; index < count; index ++)
{
//返回位于指定位置 pos 的元素的引用,有边界检查。
std::cout << deque1[index] << " ";
}
std::cout << std::endl;
std::cout << std::endl;
}
{
std::deque<Cell> deque1(6);
std::generate(deque1.begin(), deque1.end(), generate);
std::cout << "deque1: ";
std::copy(deque1.begin(), deque1.end(), std::ostream_iterator<Cell>(std::cout, " "));
std::cout << std::endl;
std::cout << "front: " << deque1.front() << std::endl;
std::cout << "back: " << deque1.back() << std::endl;
}
return 0;
}
输出