STL学习笔记(八) 序列式容器 共性

序列式容器

单动态数组vector只适合在后面插入删除  , 其中有个特化vector<bool> 节省空间  8个元素一个字节 
双端队列deque(多个动态数组)前后都适合插入删除   
链表  list 插入删除都简单,但指定访问某个数据不方便


除了可以使用标准容器共性函数外,序列式容器还可以使用以下函数:

1 构造函数,指定元素个数和初始值(初始值默认为零初始化)

vector<int> vtest(3,4); //3个4
vector<int> vtest2(3); //3个0


函数

插入: 插入多个相同值 insert(pos,n,element) , 插入区间中的数 insert(pos,pos_beg,pos_end)
赋值: assign(n,element) ,assign(pos_beg,pos_end)
调整大小:resize(n,element=零初始化) 第二个参数是默认采用零初始化的新增元素,有写则采用element进行初始化
首尾: .front()  .back() 取得首尾元素

增删: 在末尾插入.push_back(element) ,  在末尾删除(返回void,不返回值) .pop_back()  


3  序列式容器共性例子,


#include<deque>
#include <iostream>
using namespace std;
#include "show.h"
#include <string>


int main()
{
	
		 
	 //序列式容器特有的构造函数 
	 deque<int> test(3,4); //3个4
	 show(test.begin(), test.end());// 4 4 4
	 
	  deque<int> test2(3); //3个0
	 show(test2.begin(), test2.end());// 0 0 0
	 
	
	
	deque<string> ds;
//	deque< vector<int> > vs; //还可以这样定义 但  > >中间要有空格
	
	/*末尾插入 效率最高*/
	ds.push_back("hello");//在末尾插入
	ds.push_back("world");
	ds.push_back("cplusplus");
	ds.push_back("abc");
	show(ds.begin() , ds.end() , ','); //hello,world,cplusplus,abc,
	
	/*在指定地方插入*/
	ds.insert(++++ds.begin(),2,"china");//在第三个元素前面插入2个china
	show(ds.begin() , ds.end() , ',');//hello,world,china,china,cplusplus,abc,
	
	
	string s[3] = {"s1","s2","s3"};
	ds.insert(--ds.end(),s,s+3);  //最后一个元素前面插入一个区间的数据
	show(ds.begin() , ds.end() , ',');//hello,world,china,china,cplusplus,s1,s2,s3,abc,
	
	ds.pop_back(); //删掉末尾
	show(ds.begin() , ds.end() , ',');//hello,world,china,china,cplusplus,s1,s2,s3,
	
	//标准容器中的函数 删除指定位置
	ds.erase(ds.begin());
	show(ds.begin() , ds.end() , ',');//world,china,china,cplusplus,s1,s2,s3,
	
	/*调整大小*/
	cout << "ds.size:" << ds.size() << endl; //8
	
	ds.resize(12); //零初始化 即空字符串
	show(ds.begin() , ds.end() , ',');//hello,world,china,china,cplusplus,s1,s2,s3,,,,,
	cout << "ds.size:" << ds.size() << endl; //12
	
	
	ds.resize(15,"new");//增加大小,制定新增值
	show(ds.begin() , ds.end() , ',');//hello,world,china,china,cplusplus,s1,s2,s3,,,,,new,new,new,
	cout << "ds.size:" << ds.size() << endl; //15
	
	ds.resize(7);//减小大小后面的被删除
	show(ds.begin() , ds.end() , ',');//hello,world,china,china,cplusplus,s1,s2,s3,
	cout << "ds.size:" << ds.size() << endl; //7
	
	/*首尾数据*/
	cout << "front:" << ds.front() << ",back:" << ds.back() << endl;
	
	/*修改数据*/

	//1 单个赋值
	ds.front() = "你好" ;
	ds.back() = "中国";
	show(ds.begin() , ds.end() , ',');//	你好,china,china,cplusplus,s1,s2,中国,

	//2 整体赋值
	ds.assign(5,"哈哈");
	show(ds.begin() , ds.end() , ',');//哈哈,哈哈,哈哈,哈哈,哈哈,
	
	string s2[3] = {"数学","语文","英语"};
	ds.assign(s2, s2+3);
	show(ds.begin() , ds.end() , ',');//数学,语文,英语,
	
}

show.h

#ifndef SHOW_H
#define SHOW_H

template<typename T>
void show(T beg,T end,char ch = ' ')
{
	while(beg != end)
	{
		cout << *beg++  << ch;
	}
	if(ch != '\n') cout << endl;
}

#endif





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值