IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++泛型编程Generic Programming -> 正文阅读

[C++知识库]C++泛型编程Generic Programming

C++的标准模板库(STL)主要由三个组件构成:1、容器;2、迭代器;3、泛型算法

一、容器

对容器的通用型操作:
"==", "!="判断两个容器是否相等
"="将一个容器复制给另一个容器
.empty()判断是不是空的,有没有元素
.size() 返回容器内元素的个数
.clear() 删除容器内所有元素

  1. array
    数组array,最一般的数组,和C的数组一样,长度固定,声明如下:

    #include<array>
    
    //格式array<typename,length> Varname;
    array<int, 10> arr;
    
  2. vector
    vector,相当于动态数组,用的最多最方便,长度可以随时扩充:

    #include<vector>
    //格式vector<typename> Varname;
    vector<double> Vet;
    vector<int> Vet1(10);
    Vet1.push_back(5);//后端插入
    Vet1.pop_back();//后端删除
    
  3. deque
    也是个线性表,和vector类似,不过是双向的,可以在前端插入和删除

    #include<deque>
    deque<double> Var1;
    Var1.push_front(6);//前端插入
    Var1.pop_front();//前端删除
    
  4. list
    双向链表,不是线性表,存储的内容不是在连续的内存上,每个节点都有一个value和两个指针back, front分别只想前面和后面的节点;

  5. set集合,只有key

    #include<set>
    #include<string>
    set<string> word_set;
    word_set.count(key);//返回个数,要么0,要么1
    
  6. map 键值对key/value
    key通常是字符串,相当于索引;
    有.find(key)成员函数,返回查找的key的iterator,否则返回map.end()

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    int main()
    {
    	map<string,int> words;
    	string word;
    	//统计输入每种字符的个数,map中没有的会自动创建
    	while(cin>>word)
    		words[word]++;
    	map<string,int>::iterator it=words.begin()
    	//依次打印map中的内容,first成员对应key,second成员对应value
    	for(;it!=words.end();it++)
    		cout<<"key: "it->first<<" value: "<<it->second<<endl;
    	return 0;
    }
    

二、迭代器iterator(泛型指针)

类似于指针,作用于容器类上

  1. .begin()
    相当与头指针,指向第一个元素的指针

  2. .end()
    指向最后一个元素的后面的指针

    vector<int> Var{4,5,7,8};
    vector<int>::iterator head=Var.begin();
    vector<int>::iterator tail=Var.end();
    for(;head!=tail;head++)  //遍历容器类
    {
    	cout<<*head<<endl;
    }
    

三、泛型算法Generic Programming

  1. insert()插入

    //插入到position之前一个元素,返回被插入的元素的iterator
    iterator insert(itrator position, elemType value);
    
    //插入count个值
    void insert(iterator position, int count, elemType value);
    
    //插入[first,last)之间的元素
    void insert(iterator position, iterator first, iterator last);
    
  2. erase()删除

    //删除一个元素,返回被删除后,接下来后一个元素的iterator
    iterator erase(iterator position);
    
    //删除范围内元素[first,last)
    iterator erase(iterator first, iterator last);
    
  3. find()用于无序搜索,搜素范围[first, last), 返回iterator, 找不到则返回last

    iterator find(iterator first, iterator last, elemType findvalue);
    
  4. copy() 复制

    //参数 要复制的  开始  结束,   复制目的地的 开始
    copy(iterator first, iterator last, iterator To_first);
    vector<int> ivet;
    vector<int> temp{1,2,3,4,5};
    copy(temp.begin(), temp.end(), ivec.begin());
    
#include<vector>
#include<deque>
#include<list>
#include<string>
using namespace std;
int main()
{
	//产生空的容器
	list<string> slist;
	vector<int> ivec;

	//产生特定大小的容器
	list<int> ilist(100);
	vector<string> svec(32);

	//产生特定大小的容器,并赋值全相同的初值
	vector<int> ivec(10,1);  //10个1
	list<string> slist(16,"WoW");

	//通过两个迭代器iterator赋值
	int arr[8]={1,1,2,2,3,5,6,4};
	vector<int> ivec1(ia,ia+8); //赋值[ia,ia+8)之间的内容
	int a=ivec1.front();//读取第一个元素
	a=ivec1.back(); //读取最后一个元素
	ivec1.push_back(10); //在最后插入元素
	ivec1.pop_back(); //删除最后一个元素

	//复制容器赋值
	list<string> slist1(5,"wfq");
	list<string> slist2(slist1);  //复制赋值


	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 15:47:14  更:2021-12-18 15:47:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:46:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码