c++第十八章-(容器和算法)

容器和算法

容器:

  1. 容器的概念:能容纳两个或更多个值的数据结构,通常我们称为容器(container)。
  2. 这么说,数组是唯一直接支持的容器,但数组并不适合用来解决所有的问题。
  3. 上一节利用模板就实现了一种新的容器(栈Stack)。
  4. 老一辈程序员为我们提供了一种容器库,Standard Template Library。STL库。

算法:

  1. 数组大小固定的,后来引入了一种新的数据类型,vector向量,
  2. 声明:std::vector<type> vectorName;
#include <vector>

int main(int argc, const char * argv[])
{
    std::vector<std::string> names;

    names.push_back("jobs");
    names.push_back("小甲鱼");
    names.push_back("bill");

    for (int i = 0; i < names.size(); i++)
    {
        std::cout << names[i] << "\n";
    }

    return 0;
}

3.迭代器(iterator):智能指针,具有遍历复杂数据结构的能力。

因为各种迭代器的接口相同,型号却不同,这就是所谓泛型程序设计的概念:所有的操作都使用相同的接口,虽然他们的具体实现不一样。

4.迭代器的真正价值体验在它们可以和所有的容器配合使用,而使用迭代器去访问容器元素的算法可以和任何一种容器配合使用。

#include <vector>

int main(int argc, const char * argv[])
{
    std::vector<std::string> names;

    names.push_back("jobs");
    names.push_back("小甲鱼");
    names.push_back("bill");

    /**

    for (int i = 0; i < names.size(); i++)
    {
        std::cout << names[i] << "\n";
    }
     *
     */

    std::vector<std::string>::iterator iter = names.begin();
    while (iter != names.end())
    {
        std::cout << *iter << std::endl;
        ++iter;
    }
    return 0;
}

5.c++标准库提供一个专门处理算法问题的算法库algorithm,只要在源文件里:#include<algorithm>就可以用,如:std::sort(beginIterator,endIterator);

#include <vector>
#include <algorithm>

int main(int argc, const char * argv[])
{
    std::vector<std::string> names;

    names.push_back("jobs");
    names.push_back("Rola");
    names.push_back("bill");
    names.push_back("Larry");
    names.push_back("Lucy");
    names.push_back("apple");

    std::sort(names.begin(), names.end());

    /**

    for (int i = 0; i < names.size(); i++)
    {
        std::cout << names[i] << "\n";
    }
     *
     */

    std::vector<std::string>::iterator iter = names.begin();
    while (iter != names.end())
    {
        std::cout << *iter << std::endl;
        ++iter;
    }
    return 0;
}

.

c++第十八章-(容器和算法)

时间: 2024-10-14 15:25:42

c++第十八章-(容器和算法)的相关文章

Python开发【二十八章】:算法

算法基础 1.什么是算法? 算法(Algorithm):一个计算过程,解决问题的方法 2.复习:递归 递归的两个特点: 调用自身 结束条件 两个重要递归函数的对比: # 由大到小 def func3(x): if x > 0 : print(x) func3(x-1) # func3(5) # 5 4 3 2 1 # 由小到大 def func4(x): if x > 0 : func4(x-1) print(x) func4(5) # 1 2 3 4 5 3.时间复杂度 时间复杂度:用来评估

第十八章 SOCKET类的实现

                        第十八章    SOCKET类的实现         这几天反复思考,到底是从上到下.还是从底层开始往上设计?最后.还是决定从上层建筑开始.APO追求的是简单.再简单!强大.再强大!高速.高效!"天下武功.无坚不破.唯快不破!". APO的socket也不外是一种内存文件吧,但socket描述符和其它类型的文件描述符还是略有区别的.APO中的一个用户进程最多可打开64K个非socket类型的文件描述符,而APO系统只是最多可以打开16M个

Linux内核分析——第十八章 调试

第十八章    调试 18.1 准备开始 1.在用户级的程序里,bug表现比较直接:在内核中却不清晰. 2.内核级开发的调试工作远比用户级开发艰难的多. 3.准备工作需要的是: (1)一个bug (2)一个藏匿bug的内核版本 (3)相关内核代码的知识和运气 18.2 内核中的bug 1.内核中的bug多种多样. 2.引用空指针会产生一个oops:垃圾数据会导致系统崩溃. 3.定时限制和竞争条件都允许多个线程在内核中同时运行产生的结果. 18.3 通过打印来调试 一.健壮性 1.健壮性——在任何

MiS603开发板 第十八章 模拟视频输入及测试

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十八章 模拟视频输入及测试 18.1模拟视频概述 大自然的信号都是模拟的,视频信号也不例外.视频信号是指电视信号.

Gradle 1.12用户指南翻译——第二十八章. Jetty 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前

第十八章 Linux集群架构

18.1 集群介绍集群概述根据功能划分为两大类:高可用和负载均衡.1)高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务实现高可用的开源软件有:heartbeat.keepalived.后者好用,前者好久未更新了.2)负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2.实现负载均衡的开源软件有LVS.keepalived.haprox

《Linux内核设计与实现》读书笔记 第十八章 调试

第十八章调试 18.1 准备开始          需要准备的东西: l  一个bug:大部分bug通常都不是行为可靠而且定义明确的 l  一个藏匿bug的内核版本:找出bug首先出现的版本 l  相关内核代码的知识和运气 最好能让bug重现,有一些bug存在而且有人没办法让他重现,因为内核与用户程序和硬件间的交互很微妙. 18.2内核中的bug 可以有无数种原因产生,表象也变化多端.代码中的错误往往引发一系列连锁反应,目击者才看到bug. 18.3通过打印来调试 内核提供了打印函数printk

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法

44. 蛤蟆的数据结构笔记之四十四弗洛伊德Floyd算法 本篇名言:"希望是厄运的忠实的姐妹. --普希金" 我们继续来看下数据结构图中的一个算法,这个算法来自图灵奖得主. 1.  Floyd算法介绍 Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名.注意这个可不是心理学的那个弗洛伊德. 是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径

STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

 1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器) STL的六大组件分别是: 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Function object) 适配器(Adapter) 空间配置器(allocator):只能分配内存等 2.容器与算法 案例如下: #include<