在C++ STL中的deque assign()函数

在C++ STL中的deque assign()函数

deque是C++ STL(标准模板库)中的容器,它是双端队列的缩写。deque容器中的元素可以从两端进行插入和删除操作,使其在某些情况下比vector更加灵活。在deque容器中,有一个assign()函数,它可以方便地将一个容器中的元素赋值给另一个容器。本文将介绍deque assign()函数的使用方法及其常见应用场景。

deque assign函数介绍

deque容器中的assign()函数有多种重载形式,但大多数都有两个参数:一个是元素数量,另一个是初始值。这些参数的含义如下:

  • 指定的元素数量表示将要赋值的元素数量;
  • 初始值则是将要被赋给这些元素的初始值。

assign()函数可以将一个deque容器中的元素替换成来自另一个deque容器中的元素。它接受两个迭代器范围,这些迭代器定义了来自另一个deque容器中的元素的范围。在将元素从另一个容器赋值给当前deque容器时,新元素将替换当前deque容器中的元素,而不是像push_back()一样将它们插入到末尾。简而言之,assign()函数可以帮助我们清空当前deque容器,并将另一个容器的元素值覆盖到当前deque容器中。

deque assign函数的常见用法

下面我们将介绍assign()函数的一些常见用法。

1. 将另一个容器中的元素赋值给当前deque容器

下面的代码演示了如何使用assign()函数将一个deque容器中的所有元素赋值给另一个deque容器:

#include<iostream>
#include<deque>
using namespace std;
int main()
{
    deque<int> d1;
    deque<int> d2;
    d1.push_back(1);
    d1.push_back(2);
    d1.push_back(3);
    d2.assign(d1.begin(),d1.end());
    cout<<"d2.size():"<<d2.size()<<endl;
    for(size_t i=0;i<d2.size();i++){
       cout<<"d2["<<i<<"]:"<<d2[i]<<endl;
    }
    return 0;
}

上面的代码将d1容器中的所有元素赋值给d2容器,并使用for循环打印d2容器中的所有元素。在下面的输出中,我们可以看到d2容器已被d1容器完全覆盖。

输出:

d2.size():3
d2[0]:1
d2[1]:2
d2[2]:3

2. 将一个值序列赋值给当前deque容器

assign()函数的另一种常见用法是将一个序列中的值赋值给当前容器。下面的代码展示了如何使用assign()函数将值序列赋值给当前deque容器:

#include<iostream>
#include<deque>
using namespace std;
int main(){
   deque<int> d1;
   deque<int> d2;
   d1.assign(3, 100);
   d2.assign(4, 123);
   cout<<"d1.size():"<<d1.size()<<endl;
   for(size_t i=0;i<d1.size();i++){
       cout<<"d1["<<i<<"]:"<<d1[i]<<endl;
    }
   cout<<"d2.size():"<<d2.size()<<endl;
   for(size_t i=0;i<d2.size();i++){
       cout<<"d2["<<i<<"]:"<<d2[i]<<endl;
    }
    return 0;
}

上面的代码使用assign()函数将一些值分别赋值给d1容器和d2容器,然后使用for循环分别输出了d1容器和d2容器中的所有元素。可以看到,d1容器中的所有元素都被赋值为100,而d2容器中的所有元素都被赋值为123。

输出:

d1.size():3
d1[0]:100
d1[1]:100
d1[2]:100
d2.size():4
d2[0]:123
d2[1]:123
d2[2]:123
d2[3]:123

3. 清空deque容器

assign()函数的第三个常见用法是清空deque容器。下面的代码演示了如何使用assign()函数清空一个deque容器:

#include<iostream>
#include<deque>
using namespace std;
int main(){
   deque<int> d1;
   d1.push_back(1);
   d1.push_back(2);
   d1.push_back(3);
   cout<<"d1.size():"<<d1.size()<<endl;
   d1.assign(0,0); //清空容器
   cout<<"d1.size():"<<d1.size()<<endl;
   return 0;
}

上面的代码在d1容器中插入了三个元素,然后调用了assign()函数来清空容器。在下面的输出中,我们可以看到容器已被清空,并且大小为0。

输出:

d1.size():3
d1.size():0

4. 将一个initializer_list赋值给当前deque容器

assign()函数的第四个常见用法是将initializer_list(C++11新增的特性,表示列表初始化)赋值给当前deque容器。下面的代码展示了如何使用assign()函数将initializer_list赋值给当前deque容器:

#include<iostream>
#include<deque>
using namespace std;
int main(){
   deque<string> words;
   words.assign({"the", "quick", "brown", "fox"});
   cout<<"words.size():"<<words.size()<<endl;
   for (string word : words)
   cout <<" "<<word;
   cout << endl;
   return 0;
}

上面的代码创建了一个deque容器,然后使用assign()函数将一个initializer_list赋值给它。在输出中,我们可以看到容器中现在有四个字符串。

输出:

words.size():4
the quick brown fox

总结

C++ STL中的deque assign()函数是非常实用的函数,它可以将一个容器中的元素赋值给另一个容器,清空当前容器,并将值序列赋值给当前容器,也可以将initializer_list赋值到容器中。我们可以选择使用不同的assign()函数重载来适应不同场景的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程