在C++中deque::assign和deque::at之间的区别

在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的头文件是

异常:

  1. 如果抛出异常,则容器没有更改。
  2. 如果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( size, val); 引用 at (size_type n);
参数数量 它需要两个参数。 它只需要一个参数。
返回值 它没有任何返回类型。 返回给定位置的元素的直接引用。
复杂度 它的复杂度是线性的。 它的复杂度是常量的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程