在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()函数重载来适应不同场景的需求。