序列容器:
类型 | 备注 |
---|---|
array | 增加了成员函数begin() end() at()与全局函数get()等;不可增删,固定大小; |
vector | 默认尾删增;内存连续; |
deque | 双向队列;相对vector增加了头删增;内存可不连续; |
list | 双向链表 |
forward_list | 前向链表/单向链表 |
代码:(运行需要自行注释部分代码)
(array)
#include<iostream>
#include<array>
using namespace std;
int main() {
array<int, 5> nums = {};//申明类型为int大小为5的array
for (int i = 0; i < nums.size(); i++)//对array赋值 at()代替[]更加安全
nums.at(i) = i;
for (auto iter = nums.begin(); iter != nums.end(); iter++)//使用指针遍历array
cout << *iter << " ";
cout << get<2>(nums);//使用全局函数get<>()获取指定位置元素
return 0;
}
(vector)
#include<iostream>
#include<vector>
#include<algorithm>//用于remove()
using namespace std;
int main() {
//声明
vector<int> nums;//默认大小0
vector<int> nums(10);//大小为10,默认值为0
vector<int> nums(10, 1.0);//大小为10,默认值为1.0
vector<int> nums = { 1,2,3,4,5,5,5,6 };//大小为5
vector<int> nums2(nums);//直接复制nums的值与大小
vector<int> nums2(nums.begin(), nums.begin() + 3);//复制nums前3元素
//遍历
for (int iter : nums)
cout << iter << " ";
for (auto iter = nums.begin(); iter != nums.end(); iter++)
cout << *iter << " ";
for (int iter = 0; iter < nums.size(); iter++)
cout << "nums[" << iter << "]=" <<nums[iter]<<" ";
//尾部增加与删减
nums.push_back(6);//先创建元素再移动拷贝
nums.emplace_back(6);//直接在尾部创建元素
nums.pop_back();
//特定位置增加
nums.insert(nums.begin()+2, 1);//在nums[2]插入1
nums.insert(nums.begin()+2, 5, 3);//在nums[2]插入5个3
nums.insert(nums.begin() + 2, nums2.begin(), nums2.end());//在nums[2]插入nums2
nums.insert(nums.begin() + 2, { 4,5,9,8,100 });//在nums[2]插入{ 4,5,9,8,100 }
nums.emplace(nums.begin() + 2, 300);//在nums[2]插入300 emplace只能插入单个元素 但效率比insert高
//特定位置的删除
nums.erase(nums.begin()+3);//删除nums[3]
nums.erase(nums.begin(), nums.begin() + 2);//删除前两个元素
//特定值的删除(remove()在algorithm中 不改变vector的size和capacity)
auto iter1=remove(nums.begin(), nums.end(), 5);//移除所有为5的元素
for (auto iter=nums.begin();iter!=iter1;iter++)//输出移除后的vector
cout << *iter << " ";
nums.clear();//容器清空
nums.swap(nums2);//向量元素交换
return 0;
}
(deque)
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
int main() {
//声明
//deque<int> nums;//默认大小0
//deque<int> nums(10);//大小为10,默认值为0
//deque<int> nums(10, 1.0);//大小为10,默认值为1.0
deque<int> nums = { 1,2,3,4,5,5,5,6 };//大小为5
//deque<int> nums2(nums);//直接复制nums的值与大小
deque<int> nums2(nums.begin(), nums.begin() + 3);//复制nums前3元素
//遍历
cout << endl;
for (int iter : nums)
cout << iter << " ";
for (auto iter = nums.begin(); iter != nums.end(); iter++)
cout << *iter << " ";
for (int iter = 0; iter < nums.size(); iter++)
cout << "nums[" << iter << "]=" <<nums[iter]<<" ";
//头部增加与删减
nums.push_front(6);//先创建元素再移动拷贝
nums.emplace_front(6);//直接在尾部创建元素
nums.pop_front();
//尾部增加与删减
nums.push_back(6);//先创建元素再移动拷贝
nums.emplace_back(6);//直接在尾部创建元素
nums.pop_back();
//特定位置增加
nums.insert(nums.begin()+2, 1);//在nums[2]插入1
nums.insert(nums.begin()+2, 5, 3);//在nums[2]插入5个3
nums.insert(nums.begin() + 2, nums2.begin(), nums2.end());//在nums[2]插入nums2
nums.insert(nums.begin() + 2, { 4,5,9,8,100 });//在nums[2]插入{ 4,5,9,8,100 }
nums.emplace(nums.begin() + 2, 300);//在nums[2]插入300 emplace只能插入单个元素 但效率比insert高
//特定位置的删除
nums.erase(nums.begin()+3);//删除nums[3]
nums.erase(nums.begin(), nums.begin() + 2);//删除前两个元素
//特定值的删除(remove()在algorithm中 不改变deque的size)
auto iter1=remove(nums.begin(), nums.end(), 6);//移除所有为6的元素
for (auto iter=nums.begin();iter!=iter1;iter++)//输出移除后的deque
cout << *iter << " ";
nums.clear();//容器清空
nums.swap(nums2);//双向队列元素交换
return 0;
}
(list)
#include<iostream>
#include<list>
#include<array>
#include<algorithm>
using namespace std;
bool demo(int first, int second) {
return (first == second);
}
int main() {
//声明
//list<int> nums;//默认大小0
//list<int> nums(10);//大小为10,默认值为0
//list<int> nums(10, 1.0);//大小为10,默认值为1.0
//list<int> nums2(nums);//复制nums
int arr1[] = { 5,5,5,6,6,6 };
list<int> nums(arr1, arr1 + 5);//复制arr前5元素
array<int, 7> arr2= { 1,2,5,6,7,8 };
list<int> nums2(arr2.begin(), arr2.begin() + 3);//复制arr前3元素
//遍历
cout << endl;
for (int iter : nums)//顺序输出
cout << iter << " ";
//cout << endl;
//for (auto iter = nums.begin(); iter != nums.end(); iter++)//顺序输出
// cout << *iter << " ";
//cout << endl;
//for (auto iter = nums.rbegin(); iter != nums.rend(); iter++)//逆向输出
// cout << *iter << " ";
头部增加与删减
nums.push_front(6);//先创建元素再移动拷贝
nums.emplace_front(6);//直接在尾部创建元素
nums.pop_front();
尾部增加与删减
nums.push_back(6);//先创建元素再移动拷贝
nums.emplace_back(6);//直接在尾部创建元素
nums.pop_back();
特定位置增加
nums.insert(nums.begin()+2, 1);//在nums[2]插入1
nums.insert(nums.begin()+2, 5, 3);//在nums[2]插入5个3
nums.insert(++nums.begin(), nums2.begin(), nums2.end());//在begin后1位插入nums2
nums.insert(++nums.begin(), { 4,5,9,8,100 });//在begin后1位插入{ 4,5,9,8,100 }
nums.emplace(++nums.begin(), 300);//在begin后1位插入300 emplace只能插入单个元素 但效率比insert高
nums.splice(++nums.begin(), nums2);//插入整个nums2
nums.splice(++nums.begin(), nums2, ++nums2.begin());//裁剪nums2第二个位置
nums.splice(++nums.begin(), nums2, ++nums2.begin(), nums2.end());//第二个位置到倒数第一个位置
特定位置的删除
nums.erase(++nums.begin());//删除第二个元素
nums.erase(++nums.begin(), nums.end());//删除第二个元素到最后一个元素
nums.remove(6);//移除所有为6的元素
nums.remove_if([](int value) {return value < 2; });//移除小于2的元素
nums.unique();//移除相邻重复的元素
nums.unique(demo);//移除相邻重复的元素 demo为逻辑函数
nums.clear();//容器清空
nums.swap(nums2);//元素交换
nums.reverse();//元素反转
nums.merge(nums2);//有序deque合并 原本有序 合并后也有序
return 0;
}
(forward_list)
#include<iostream>
#include<forward_list>
#include<array>
#include<algorithm>
#include<iterator>
using namespace std;
int main() {
//声明
/*forward_list<int> nums;
forward_list<int> nums(10);
forward_list<int> nums(10, 5);
forward_list<int> nums1(nums);*/
int arr1[] = { 5,5,5,6,6,6 };
forward_list<int> nums(arr1, arr1 + 5);
array<int, 5 > arr2= {99, 84, 5, 6, 123};
forward_list<int> nums2(arr2.begin(), arr2.end());
//遍历
cout << endl;
for (int iter : nums)//顺序输出
cout << iter << " ";
//cout << endl;
//for (auto iter = nums.begin(); iter != nums.end(); iter++)//顺序输出
// cout << *iter << " ";
//cout << endl;
//在头部增删
nums.push_front(100);
nums.emplace_front(101);
nums.pop_front();
//在特定位置增删
nums.emplace_after(++nums.begin(), 100);
nums.insert_after(++nums.begin(), 100);
nums.erase_after(nums.begin());
nums.splice_after(nums.begin(), nums2);//将nums2指定位置 插入nums指定位置
nums.splice_after(nums.begin(),nums2, ++nums2.begin());
nums.splice_after(nums.begin(), nums2, ++nums2.begin(), nums2.end());
nums.remove(100);//移除100
nums.remove_if([](int value) {return value < 98; });//移除小于98
nums.unique();//删除相邻重复元素
nums.swap(nums2);//交换
nums.merge(nums2);//合并
nums.sort();//排序
nums.reverse();//逆转
nums.clear();//清空
distance(nums.begin(), nums.end());//返回列表元素个数 头文件<iterator>
return 0;
}