在C++中deque::assign和deque::at之间的区别
双端队列(Deque)是带有两端扩展和收缩功能的序列容器。他们类似于向量,但在末尾和开头插入和删除元素方面更加高效。与向量不同,连续的存储分配可能无法保证。在这里我们将看到C++中deque::assign和deque::at之间的区别。
deque::assign
deque::assign用于通过替换其当前内容来分配新内容给双端队列容器。它相应地修改了大小。
语法:
dequename.assign(<int> size, <int> val)
参数:
1. size: 它指定要分配到容器中的值的数量。
2. val: 它指定要分配到容器中的值。
在该容器中,所有迭代器、指针和引用都无效。使用deque::assign的头文件是
下面是实现deque::assign的C++程序:
// C++ program to implement deque::assign
#include <iostream>
#include<deque>
using namespace std;
// Driver code
int main()
{
// Declaring the deque
deque<int> first = {10, 20, 30, 40, 50, 60};
deque<int> second;
// Iterator for deque to traverse
deque<int>::iterator itr = second.begin();
// Assigning first deque elements
// into second
second.assign(first.begin(),
first.end());
cout << "在分配后的元素:";
for(itr = second.begin();
itr != second.end(); ++itr)
{
cout <<*itr<<" ";
}
cout << endl;
return 0;
}
输出
在分配后的元素: 10 20 30 40 50 60
- 时间复杂度: O(N)。
- 空间复杂度: O(N)。
deque::at
deque::at用于返回双端队列容器对象中位置为 x 的元素的引用。deque::at会自动检查 x 是否在容器的有效元素范围内。
语法:
at(size_type n);
参数:
要获取的元素的位置。
返回值: 在给定位置的元素的直接引用。
在该容器中,所有迭代器都是有效的。使用deque::at的头文件是
异常:
- 如果抛出异常,则容器没有更改。
- 如果n超出范围,则会抛出out_of_range。
下面是实现deque::at的C++程序:
// C++ program to implement
// deque::at
#include <iostream>
#include <deque>
using namespace std;
// Driver code
int main ()
{
// 10个初始为零的unsigned整数
deque<int> gfg (10);
// 在这里我们已经分配了一些值
for (int i = 0; i < gfg.size(); i++)
gfg.at(i) = i;
cout << "使用deque::at获取元素后:" << endl;
for (int i = 0; i < gfg.size(); i++)
{
cout << ' ' << gfg.at(i);
}
cout << endl;
return 0;
}
输出
使用deque::at获取元素后: 0 1 2 3 4 5 6 7 8 9
- 时间复杂度: O(1)
- 空间复杂度: O(1)
deque::assign vs deque::at
下面是deque::assign和deque::at之间的区别:
基础 | deque::assign | deque::at |
---|---|---|
定义 | 用于将新内容分配给deque容器,替换其当前内容。 | 用于返回deque容器对象中位置n上的元素的引用。 |
语法 | dequename.assign( |
引用 at (size_type n); |
参数数量 | 它需要两个参数。 | 它只需要一个参数。 |
返回值 | 它没有任何返回类型。 | 返回给定位置的元素的直接引用。 |
复杂度 | 它的复杂度是线性的。 | 它的复杂度是常量的。 |