一起学习c++11——c++11中的新增的容器

c++11新增的容器1:array
array最早是在boost中出现:http://www.boost.org/doc/libs/1_61_0/doc/html/array.html
当时的初衷是希望提供一个在栈上分配的,定长数组,而且可以使用stl中的模板算法。
array的用法如下:

#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>
#include <array>

int main()
{
    // construction uses aggregate initialization
    std::array<int, 3> a1{ {1, 2, 3} }; // double-braces required in C++11 (not in C++14)
    std::array<int, 3> a2 = {1, 2, 3};  // never required after =
    std::array<std::string, 2> a3 = { std::string("a"), "b" };

    // container operations are supported
    std::sort(a1.begin(), a1.end());
    std::reverse_copy(a2.begin(), a2.end(),
                      std::ostream_iterator<int>(std::cout, " "));

    std::cout << ‘\n‘;

    // ranged for loop is supported
    for(const auto& s: a3)
        std::cout << s << ‘ ‘;
}

c++11中新增的容器:unordered_map unordered_set
同样是来至boost的组件:http://www.boost.org/doc/libs/1_61_0/doc/html/unordered.html
在早期的标准库stl中是只有红黑树map,而没有hash map的。
所以boost提供了unordered这个组件,并且在c++11中进入了标准库。
unordered_map提供了和map类似的接口,只是map是有序,而unordered_map因为采用hash map的数据结构,所以是无序的。
另外,因为map采用的是红黑树,所以查找性能是O(log(n))。而unordered_map采用hash map,所以查找性能是O(1)。
所以一般来说小规模的数据适合采用map(百W以下),而大规模的数据适合unordered_map(百W以上)
unordered_map使用如下:

#include <iostream>
#include <string>
#include <unordered_map>

int main()
{
    // Create an unordered_map of three strings (that map to strings)
    std::unordered_map<std::string, std::string> u = {
        {"RED","#FF0000"},
        {"GREEN","#00FF00"},
        {"BLUE","#0000FF"}
    };

    // Iterate and print keys and values of unordered_map
    for( const auto& n : u ) {
        std::cout << "Key:[" << n.first << "] Value:[" << n.second << "]\n";
    }

    // Add two new entries to the unordered_map
    u["BLACK"] = "#000000";
    u["WHITE"] = "#FFFFFF";

    // Output values by key
    std::cout << "The HEX of color RED is:[" << u["RED"] << "]\n";
    std::cout << "The HEX of color BLACK is:[" << u["BLACK"] << "]\n";

    return 0;
}

c++11中新增的容器:非成员begin\end
std::begin/std::end并不是容器,但是因为设计std::begin/std::end的目的应该是为了让传统的C风格数组可以使用stl中的模板算法,所以也放在这里介绍。
std::begin/std::end使用如下:

#include <iostream>
#include <vector>
#include <iterator>

int main()
{
    std::vector<int> v = { 3, 1, 4 };
    auto vi = std::begin(v);
    std::cout << *vi << ‘\n‘; 

    int a[] = { -5, 10, 15 };
    auto ai = std::begin(a);
    std::cout << *ai << ‘\n‘;
}

abelkhan技术论坛:http://abelkhan.com/forum.php,欢迎大家交流技术

时间: 2024-12-30 04:44:50

一起学习c++11——c++11中的新增的容器的相关文章

lua学习笔记11:lua中的小技巧

lua中的小技巧,即基础lua语言本身的特种,进行一个些简化的操作 一 巧用or x = x or v 等价于: if not x then x = v end 如果x为nil或false,就给他赋值为 二 三元运算符实现 a and b or c 类似C语言: a ? b : c and 的运算由优先级高于or lua学习笔记11:lua中的小技巧,布布扣,bubuko.com

学习Python编程的11个精品资源

本文由 伯乐在线 - atupal 翻译自 Alex Ivanovs.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 用 Python 写代码并不难,事实上,它一直以来都是被声称为最容易学习的编程语言.如果你正打算学习 web 开发,Python 是一个不错的选择,甚至你想学游戏开发也可 以从 Python 开始,因为用 Python 来构建游戏的资源实在是太多了.这是一种快速 学习语言的一种方法. 许多程序员使用 Python 作为初学语言,然后接着是像 PHP 和 Ruby 这样的语言.

windows server 2012 系统管理 1-1 在虚拟机中安装windows server 2012

1-1在虚拟机中安装windowsserver 2012 准备工作:vmware workstation12 ,windows server 2012 镜像.实验步骤: 运行vmware workstation 12,选择主界面"创建新的虚拟机" 2.选择"典型",单击下一步. 3.选择事先下好的镜像文件,单击下一步 4.输入产品密钥(也可以不输,待安装完系统后用激活工具激活). 5.设置用户名和密码(可选). 6.设置虚拟机名称和安装位置. 7.设置磁盘大小和磁盘

【英语学习】2016.09.11 Culture Insider: Teacher&#39;s Day in ancient China

Culture Insider: Teacher's Day in ancient China 2016-09-10 CHINADAILY Today is the 32nd Chinese Teacher's Day – a festival celebrating the 2,300-year tradition of respecting teachers and education in China. It's similar to the birthday of Confucius o

Lua语言基础汇总(11) -- Lua中的模块与包

前言 从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包.require用于使用模块,module用于创建模块.简单的说,一个模块就是一个程序库,可以通过require来加载.然后便得到了一个全局变量,表示一个table.这个table就像是一个命名空间,其内容就是模块中导出的所有东西,比如函数和常量,一个符合规范的模块还应使require返回这个table.现在就来具体的总结一下require和module这两个函数. require函

11 在.NET 中如何加密和解密一个字符串

string plainText = "This is plain text that we will encrypt"; string password = "[email protected]$$w0rd"; Console.WriteLine(plainText); Console.WriteLine(); create a new instance of our encryption class passing in the password as the

Effective C++ Item 11 在operator= 中处理“自我赋值”

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:确保当对象自我赋值时operator=有良好行为.其中技术包括比较"来源对象"和"目标对象"的地址.精心周到的语句顺序.以及copy-and-swap. 示例:没有"证同测试" #include <iostream> #include <string> using namespace std; class Bi

Linux学习笔记4月11日任务

11.10/11.11/11.12 安装PHP5 11.13 安装PHP7 php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn.net/u013785951/article/details/60876816 查看编译参数 http://ask.apelearn.com/question/1295 原文地址:http://blog.51cto.com/12059818/2105155

学习Java的第11天

学习Java的第11天 Thread构造器 Thread():创建新的Thread对象 Thread(String threadname):创建线程并指定线程实例名 Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接 口中的run方法 Thread(Runnable target, String name):创建新的Thread对象 线程的生命周期 新建 就绪 运行 死亡 运行可能遭遇阻塞 阻塞之后继续就绪 之后再次执行 运行结束后 死亡 线程的同