博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++容器和算法
阅读量:5898 次
发布时间:2019-06-19

本文共 3905 字,大约阅读时间需要 13 分钟。

转自:

容器:某一类型数据的集合。

C++标准顺序容器包括:vector,list,queue

容器初始化

vector
t; for (int i = 0; i < 50; i ++) { t.push_back(i); } vector
c; // 空容器 vector
c1(t); // 容器t的副本 vector
c2(3, 4); // 3个值为4的容器 vector
c3(t.begin(), t.end() - 10); // 容器t的begin()和end()-10之前的数据副本 vector
c4(5); // 创建包含5个空默认值的副本

容器类型的规则:支持复制和赋值操作

容器的迭代访问

窗口的迭代访问非常类似指针的操作,都支持++和--的位移操作,迭代器内置了操作符重载。

*itemitem->num++itemitem++--itemitem--iter1 == iter2iter1 != iter2

迭代器访问

for (vector
::iterator iter = strs2.begin(); iter != strs2.end(); iter ++) { std::cout << *iter << std::endl; }

迭代器的首元素迭代器和尾元素迭代器可以通过begin()和end()方法获取,并通过++方法进行迭代。

迭代器操作的API:

Iterators:

Member types

 

member type definition
reference Allocator::reference
const_reference Allocator::const_reference
iterator Random access iterator
const_iterator Constant random access iterator
size_type Unsigned integral type (usually same as )
difference_type Signed integral type (usually same as )
value_type T
allocator_type Allocator
pointer Allocator::pointer
const_pointer Allocator::const_pointer
reverse_iterator reverse_iterator<iterator>
const_reverse_iterator reverse_iterator<const_iterator>

增加和删除元素

容器的API提供在具体什么位置增加或者删除元素,或者在什么元素增加或者删除元素:

Modifiers:

容器大小

Capacity:

关联容器

C++中的关联容器包括 map 和 set
map与key, value相对应,整合起来map与pair类型对应
set 直接与 value相对应
 
同时存在multimap和multiset两个对象,支持一个key对应多个value
具体可以参考:

 

C++的容器算法

最常见的是find方法,C++中的示例:

// 包含必要的头文件

#include <algorithm>

vector
vec(2, 35);vec.push_back(8);vec.push_back(80);vec.push_back(98);vec.push_back(25);vec.push_back(12);vector
::const_iterator result = find(vec.begin(), vec.end(), 80);std::cout << 80 << (result == vec.end() ? " is not present" : " is present") << std::endl;

 

 

除了少数情况下,C++的容器算法都是在一个范围内的元素进行操作。所以其参数顺序情况一般为:iter_begin, iter_end, search_value。

C++容器使用的算法与数据结构书中大致相同:

1. 只读算法(查找)

2. 写算法(排序)

3. 合并

4. 堆

5. 最大/最小值等

 

常用只读算法:

....

 

实践了fill, fill_n, back_inserter, copy, replace, sort, count_if

#include 
#include
#include
#include
#include
using namespace std;void log(std::string log) { std::cout << log << std::endl;}void apiTest() {}int main(){ vector
vec(2, 10); vec.push_back(3); vec.push_back(4); vec.push_back(15); vec.push_back(45); vec.push_back(24); vec.push_back(234); fill(vec.begin() + 1, vec.end() - 2,3); fill_n(back_inserter(vec), 10, 2); replace(vec.end() - 5, vec.end(), 2, 8); vector
::const_iterator iter = vec.begin(); for (;iter != vec.end();iter++) { std::cout << *iter << std::endl; } vector
vec2; copy(vec.begin(), vec.end(), back_inserter(vec2)); return 0;}

输出结果:

关于容器算法相关一章可参考:

转载地址:http://abhsx.baihongyu.com/

你可能感兴趣的文章
艾级计算机的发展与挑战
查看>>
我的友情链接
查看>>
RocketMQ事务消息实战
查看>>
mysql-mmm-2.2.1安装手册
查看>>
搭建yum源服务器
查看>>
delphi使用ado导出excel
查看>>
linux 命令详解 二十三
查看>>
IT职场人生系列之二:大学生活
查看>>
4.一对多关联映射
查看>>
手把手教你做出好看的文本输入框
查看>>
Directory获取方式
查看>>
eclipse在线安装mybatis generator插件、及插件的使用
查看>>
Unity Svn(转)
查看>>
zabbix 3.2.7 (源码包)安装部署
查看>>
看懂此文,不再困惑于 JS 中的事件设计
查看>>
vsCode 快捷键、插件
查看>>
vue-validator(vue验证器)
查看>>
jQuery Ajax MVC 下拉框联动
查看>>
P2569 股票交易
查看>>
每天一个linux命令(21):chgrp,chown,chmod
查看>>