C++中deque::begin与deque::assign的区别
双向队列或deque是一种序列容器,具有两端扩展和收缩的特性。它们类似于vector,但在插入和删除元素的末端和开头的情况下更有效。与向量不同,不能保证连续的存储分配。在这里,我们将看到在C++中deque::assign和deque::at之间的区别。
deque::begin
deque::begin用于返回指向deque容器中第一个元素的迭代器。它返回一个随机存取迭代器,指向它。
语法:
iterator begin();
参数: None
返回值: 它的返回值是指向序列容器开头的迭代器。
迭代器有效性: 迭代器的有效性没有改变。
头文件:
<deque>
异常: deque::begin永远不会抛出异常。
示例:
// C++ program to implement deque::begin
#include <deque>
#include <iostream>
using namespace std;
// Driver code
int main()
{
// Declaration of Deque
deque<int> GFG = { 1, 2, 3, 4, 5 };
// Iterator Pointing to the first element in the
// container
deque<int>::iterator itr = GFG.begin();
cout << "Elements in Deque are : ";
for (itr = GFG.begin(); itr != GFG.end(); ++itr) {
cout << *itr << " ";
}
cout << endl;
return 0;
}
输出:
Elements in Deque are : 1 2 3 4 5
- 时间复杂度: O(N)
- 空间复杂度: O(1)
deque::assign
deque::assign用于通过替换其当前内容来分配新内容到deque容器中。它相应地修改大小。
语法:
dequename.assign( <int> size, <int> val)
参数:
- size: 它指定要分配给容器的值的数量。
- val: 它指定要分配给容器的值。
返回值: None
迭代器有效性: 在这个容器中,所有的迭代器、指针和引用都无效。
头文件:
<deque>
异常: 如果抛出异常,容器处于有效状态。
示例:
// C++程序实现deque::assign
#include<deque>
#include<iostream>
使用namespace std;
//驱动器代码
int main()
{
//声明Deque
deque<int> A = {5, 10, 15, 20};
deque<int> B;
//遍历deque B的迭代器
deque<int>::iterator itr1 = B.begin();
//遍历deque A的迭代器
deque<int>::iterator itr2 = A.begin();
//将deque A元素分配到deque B中
B.assign(A.begin(), A.end());
cout<<"容器A中的元素是:";
for (itr2 = A.begin(); itr2!= A.end();++itr2) {
cout<<*itr2<<" ";
}
cout<<endl;
cout<<"容器B中的元素:";
for (itr1 = B.begin(); itr1!= B.end();++itr1) {
cout<<*itr1<<" ";
}
cout<<endl;
返回0;
}
输出:
容器A中的元素是:5 10 15 20
容器B中的元素:5 10 15 20
- 时间复杂度: O(N)
- 空间复杂度: O(N)
deque::assign与deque::begin之间的区别
下面是deque::assign和deque::begin之间的区别
基础 | deque::begin | deque::assign |
---|---|---|
定义 | 它用于返回一个迭代器,该迭代器指向deque容器中的第一个元素。 | 它用于将新内容返回给deque容器,替换其当前内容 |
语法 | 迭代器开始(); | dequename.assign( |
参数数量 | 它不需要任何参数 | 它需要两个参数。 |
返回值 | 其返回值是指向序列容器开头的迭代器。 | 它没有任何返回类型 |
复杂度 | 常量 | 线性 |