如何在C ++ STL中插入一系列元素?
STL(Standard Template Library)是C ++中最强大的部分之一。STL是一个C ++标准程序库,它提供了一组通用的模板类和函数,包括容器,算法和迭代器。在C ++ STL中,您可以使用各种容器来存储和处理数据,这使得编写程序更加简单,快速和可读性的。STL中提供了一种容器类型来存储一系列元素,而插入元素也是容器操作中经常需要进行的操作。
本文将介绍如何在C ++ STL中插入一系列元素。
使用 vector 容器
vector是一种动态数组,它可以存储任何类型的数据。向vector容器添加数据,使用 vector::push_back()函数。vector::insert() 函数可以插入一系列元素,分为以下两种情况:
插入单个元素
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(10);
vec.push_back(20);
vec.insert(vec.begin()+1, 30);
//输出vec数组
for (auto i : vec)
cout << i << " ";
return 0;
}
上述代码将在索引位置1插入一个整数30,这将向量中的元素分别变为10, 30, 20。
插入多个元素
使用vector::insert()函数插入多个元素。如下:
#include <vector>
#include <iostream>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(10);
vec.push_back(20);
vec.insert(vec.begin()+1, {30, 40, 50});
//输出vec数组
for (auto i : vec)
cout << i << " ";
return 0;
}
上述代码将在索引位置1插入整数数组{30,40,50},这将向量中的元素分别变为10, 30, 40, 50,20。
使用 list 容器
list是双向链表类型,它可以在任何位置快速添加和删除元素。list的插入操作使用list::insert()函数。与vector不同,list::insert()函数不能使用大括号初始化列表。
#include <list>
#include <iostream>
using namespace std;
int main(){
list<int> l1;
l1.push_back(10);
l1.push_back(20);
l1.insert(l1.begin(), 30);
l1.insert(l1.end(), 40);
l1.insert(next(l1.begin()), 50);
//输出链表中元素
for(auto x : l1){
cout << x << " ";
}
return 0;
}
上述代码将在链表中插入数值为30,50和40,从而将链表中的元素分别变为30, 10, 50, 20, 40。next(l1.begin())是使用C ++STL中专用的next指针函数,它返回迭代器参数之后的元素。
使用 deque 容器
deque是双端队列,能够使用通用迭代器插入多个元素。
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main(){
deque<int> dq1{1,2,3};
int arr[]={4,5};
dq1.insert(dq1.begin(),&arr[0],&arr[2]);
for(auto x:dq1)
cout<<x<<endl;
}
输出结果:4, 5, 1, 2, 3
使用 set 容器
set是一种容器类型,它可以自动按升序存储元素,并且每个元素都是唯一的。使用set::insert()函数向set容器插入单个或多个元素,如下所示:
#include <set>
#include <iostream>
using namespace std;
int main(){
set<int> s1;
s1.insert(10);
s1.insert(20);
s1.insert(30);
s1.insert(40);
s1.insert(30);//30已经存在,不会再次插入
s1.insert({50, 60, 70});
//输出set中的元素
for(auto x : s1){
cout << x << " ";
}
return 0;
}
上述代码将在set中插入整数20, 30, 40, 50, 60和70,30已经存在,不会再次插入,这将set中的元素分别变为10, 20, 30, 40, 50, 60和70,按升序排列。
使用 map 容器
map是一个存储键值对的容器,称为映射。在map容器中插入元素,使用map::insert()函数。该函数可以插入单个或多个键值对元素。
#include <map>
#include <iostream>
using namespace std;
int main(){
map<char, int> m1;
m1.insert(pair<char, int>('a', 1));
m1.insert(pair<char, int>('b', 2));
m1.insert(pair<char, int>('c', 3));
m1.insert(make_pair('d', 4));
m1.insert(make_pair('e', 5));
//输出map中的元素
for(auto x : m1){
cout << x.first << ":" << x.second << endl;
}
return 0;
}
上述代码将在map容器中插入键值对元素(’a’,1),(’b’,2),(’c’,3),(’d’,4),(’e’,5),并按键的升序打印map容器中的元素。
多容器插入
C ++ STL库中的所有容器都可以使用相同的通用技术来添加元素。例如,可以使用函数中的多个容器,如vector,list或map来执行多容器插入。
#include <iostream>
#include <vector>
#include <list>
#include <map>
using namespace std;
template<typename T1, typename T2>
void insert_multiple(T1 &container, T2 && value){
container.insert(container.end(), value.begin(), value.end());
}
int main(){
vector<int> v1;
list<int> l1;
map<char, int> m1;
vector<int> vec{10, 20, 30, 40, 50};
list<int> li{11, 22, 33, 44, 55};
map<char, int> mp{{'a', 1}, {'b', 2}, {'c', 3}};
insert_multiple(v1, vec);
insert_multiple(l1, li);
insert_multiple(m1, mp);
//输出vector
cout << "v1: ";
for(auto i : v1)
cout << i << " ";
cout << endl;
//输出list
cout << "l1: ";
for(auto i : l1)
cout << i << " ";
cout << endl;
//输出map
cout << "m1: ";
for(auto x : m1){
cout << x.first << ":" << x.second << " ";
}
cout << endl;
return 0;
}
上述代码使用insert_multiple()函数将元素插入到vector,list和map容器中,然后输出它们。
结论
在C ++ STL中,插入元素是常见的操作之一。使用STL提供的各个容器类型(如vector,list,deque,set和map),可以轻松地将元素插入到容器中。元素的插入方式可以根据需要灵活选择,单个或多个元素的插入可使用相应的STL函数完成。