当前位置: 首页 > news >正文

C++容器与算法

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

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

容器初始化

        vector<int> t;
        for (int i = 0; i < 50; i ++) {
                t.push_back(i);
        }

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

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

容器的迭代访问

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

*item
item->num
++item
item++
--item
item--
iter1 == iter2
iter1 != iter2

迭代器访问

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

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

迭代器操作的API:

Iterators:

Member types

 

member typedefinition
referenceAllocator::reference
const_referenceAllocator::const_reference
iteratorRandom access iterator
const_iteratorConstant random access iterator
size_typeUnsigned integral type (usually same as size_t)
difference_typeSigned integral type (usually same as ptrdiff_t)
value_typeT
allocator_typeAllocator
pointerAllocator::pointer
const_pointerAllocator::const_pointer
reverse_iteratorreverse_iterator<iterator>
const_reverse_iteratorreverse_iterator<const_iterator>

增加和删除元素

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

Modifiers:

容器大小

Capacity:

关联容器

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

 

C++的容器算法

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

// 包含必要的头文件

#include <algorithm>

vector<int> vec(2, 35);
vec.push_back(8);
vec.push_back(80);
vec.push_back(98);
vec.push_back(25);
vec.push_back(12);
vector<int>::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 <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void log(std::string log) {
    std::cout << log << std::endl;
}
void apiTest() {
}
int main()
{
    vector<int> 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<int>::const_iterator iter = vec.begin();
    for (;iter != vec.end();iter++) {
        std::cout << *iter << std::endl;
    }
    vector<int> vec2;
    copy(vec.begin(), vec.end(), back_inserter(vec2));
    return 0;
}

输出结果:

关于容器算法相关一章可参考:http://www.cplusplus.com/reference/algorithm/

 

转载于:https://www.cnblogs.com/haiyupeter/archive/2012/07/29/2613145.html

相关文章:

  • PostgreSQL在何处处理 sql查询之四十三
  • Tomcat建立多个应用(Web Server),多个主机,多个站点的方法
  • org.tmatesoft.svn.core.SVNCancelException: svn: E200015: authentication canc
  • Linux下查看Tomcat的控制台输出信息
  • 每天一句话
  • Android基础 使用ToolBar教你打造一个通用的标题栏
  • 单点登录配置问题
  • Mac 10.11 React Native 安装记录
  • 字符串编辑距离(转载)
  • 2.10-2.13环境变量、CP、MV、文档查看
  • Civil 3D 2013新功能及新API Webcast下载
  • wpf treeview 数据绑定 递归绑定节点
  • xml文件的解析
  • webpack开发jquery插件——开发环境准备
  • Android选项菜单
  • [case10]使用RSQL实现端到端的动态查询
  • [数据结构]链表的实现在PHP中
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【知识碎片】第三方登录弹窗效果
  • CSS盒模型深入
  • Django 博客开发教程 16 - 统计文章阅读量
  • git 常用命令
  • JavaScript 基本功--面试宝典
  • JavaScript 奇技淫巧
  • Java到底能干嘛?
  • leetcode386. Lexicographical Numbers
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从输入URL到页面加载发生了什么
  • 动态规划入门(以爬楼梯为例)
  • 如何利用MongoDB打造TOP榜小程序
  • 使用 @font-face
  • 王永庆:技术创新改变教育未来
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • linux 淘宝开源监控工具tsar
  • 如何用纯 CSS 创作一个货车 loader
  • ​低代码平台的核心价值与优势
  • # .NET Framework中使用命名管道进行进程间通信
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Java NIO(一)FileChannel
  • #Linux(权限管理)
  • #NOIP 2014#Day.2 T3 解方程
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $NOIp2018$劝退记
  • (ZT)薛涌:谈贫说富
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (三)终结任务
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)C#调用WebService 基础