加锁和解锁,也可以在构造函数和析构函数里面,自动调用。

相等和等价的关系:等价是用在排序的时候,跟less函数有关。

vector,deque,string 要用erase-remove组合;而关联容器,直接erase就可以了。

copy(x.begin(), x.end(), ostream_iterator<string>(cout, "\n"));

但是如果x的类型是string*,就不行。

自定义一个print(const string*ps);

然后 for_each(x.begin(), x.end(), print);

或者

struct Dereference{

template<typename T>

const T& operator()(const T* ptr)const {

return *ptr;

}

}

transform(x.begin(), x.end(),

ostream_iterator<string>(cout, "\n"),

Dereference());

注意transform的两种形式:

template < class InputIterator, class OutputIterator, class UnaryOperator >
OutputIterator transform ( InputIterator first1, InputIterator last1,
OutputIterator result, UnaryOperator op ); template < class InputIterator1, class InputIterator2,
class OutputIterator, class BinaryOperator >
OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, OutputIterator result,
BinaryOperator binary_op ); 有如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数对象op操作,交换后的结果放在[result,result+(last-first))区间中。另一个将迭代器区间[first1,last1)的元素*i,依次与[first2,first2+(last-first))的元素*j,执行二元函数操作binary_op(*i,*j),交换结果放在[result,result+(last1-first1))。

set的比较类型,是less_equal,注意语义里面带了equal。

可以我看cplusplus网站上面定义的是less。

那还是以less为准吧。

http://www.cplusplus.com/reference/set/set/set/

用advance和distance可以把const iterator 转换成 iterator

其实是这样,iterator i = x.begin(); ci是const iterator

那么 advance(i, distance(i, ci));也就是把 i 移动到 ci 的位置。

对于 reverse_iterator类型,有一个base函数,能够返回对应的正向iterator信息,因为有的函数只支持正向iterator.

但是这个base返回的iterator,只能在insert的时候用,因为指向的reverse那个方向的前一个节点。

对于erase的时候,就不能用了,因为和reverse的指的不是一个节点。

算法

transform 很多地方都能够用到。

但是一定要注意,result的空间要大于等于待放入的内容。不然结果未定义。

比如:

尾部加入,用back_inserter

result.reserve(result.size()+values.size());

transform(value.begin(), value.end(),

back_inserter(result),

transfunc);

如果需要覆盖

if (result.size() < value.size()) {

result.resize(value.size())

}

transform(value.begin(), value.end(),

result.begin(),

transfunc);

partial_sort对于头部排序,很好用。

partial_sort(w.begin(), w.begin()+20, w.end(), comp);

而如果前面20个也不关心顺序,那么用

nth_element

用法:

nth_element(w.begin(), w.begin()+19, w.end(), comp);

partial_sort是不稳定的,nth_element,sort也没有提供稳定性。

partition函数用来分隔的。注意,partition是快排很好的工具,但是stl里面的partition因为第三个参数是一个bool函数,所以在快排的时候,不太好用。

bool函数为true的,放在partition的前面。

bool isOdd(int i) {return (i%)==;}

int ir[] = {, , , , , };
vector<int> x(ir, ir+sizeof(ir)/sizeof(int)); vector<int>::iterator itr = partition(x.begin(), x.end(), isOdd); copy(x.begin(), itr, ostream_iterator<int>(cout, " "));
cout<<endl;
copy(itr, x.end(), ostream_iterator<int>(cout, " "));

输出:

   

stack和vector都有 emplace函数,而stack其实是调用了底层容器的emplace_back,

都是C++11的。

The container is extended by inserting a new element at position. This new element is constructed in place using args as the arguments for its construction.

int main ()
{
std::vector<int> myvector = {,,}; auto it = myvector.emplace ( myvector.begin()+, );
myvector.emplace ( it, );
myvector.emplace ( myvector.end(), ); std::cout << "myvector contains:";
for (auto& x: myvector)
std::cout << ' ' << x;
std::cout << '\n'; return ;
} Output:
myvector contains:

effective stl读书笔记 & stl里面提供的算法 & emplace & ostream_iterator的更多相关文章

  1. Effective STL 读书笔记

    Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...

  2. Effective STL读书笔记

    Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按 ...

  3. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  4. effective c++读书笔记(一)

    很早之前就听过这本书,找工作之前读一读.看了几页,个人感觉实在是生涩难懂,非常不符合中国人的思维方式.之前也有博主做过笔记,我来补充一些自己的理解. 我看有人记了笔记,还不错:http://www.3 ...

  5. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  6. 游戏人工智能 读书笔记 (四) AI算法简介——Ad-Hoc 行为编程

    本文内容包含以下章节: Chapter 2 AI Methods Chapter 2.1 General Notes 本书英文版: Artificial Intelligence and Games ...

  7. STL读书笔记

    vector - 会自动增长的数组 vector又称为向量数组,他是为了解决程序中定义的数组是不能动态改变大小这个缺点而出现的.一般程序实现是在类创建的时候同时创建一个定长数组,随着数据不断被写入,一 ...

  8. 【Effective C++读书笔记】序

    C++ 是一个难学易用的语言! [C++为什么难学?] C++的难学,不仅在其广博的语法,以及语法背后的语义,以及语义背后的深层思维,以及深层思维背后的对象模型: C++的难学还在于它提供了四种不同而 ...

  9. Effective C++读书笔记(转)

    第一部分 让自己习惯C++ 条款01:视C++为一个语言联邦 一.要点 ■ c++高效编程守则视状况而变化,取决于你使用c++的哪一部分. 二.扩展 将c++视为一个由相关语言组成的联邦而非单一语言会 ...

随机推荐

  1. YTUOJ-计算该日在本年中是第几天(用户自己定义类型)

    题目描写叙述 定义一个结构体变量(包含年.月.日).编写一个函数days,由主函数将年.月.日传递给函数days,计算出该日在本年中是第几天并将结果传回主函数输出. 输入 年月日 输出 当年第几天 例 ...

  2. vncserverpassword改动

    前几天去客户现场,客户说有測试库.Linux下的,帮忙给新建一个数据库,我这么热心的人.是吧 那就開始吧. 一般使用vnc搞图形安装.熟练的打开vnc.输入password,报错!!我愣了几秒,忽然反 ...

  3. NGUI研究之开发项目的一些使用心得比較细节

     不知不觉使用NGI插件已经有一段时间了.感觉NGUI真的是眼下Unity3D中最好用的UI插件. 可是它也有一些不是BUG的BUG,这些问题可能会让新人摸不着头脑,那么这篇文章将总结一下这段时间 ...

  4. django 笔记8 url模板 自定义函数 simple_tag

    感谢alex老师~ 知识点: URL - 两个没见 url>路由系统> 函数或类 > 返回字符串 Form表单提交: 提交 >url>函数或类中的方法 -.. HttpR ...

  5. 机器学习规则:ML工程最佳实践----rule_of_ml section 3【翻译】

    作者:黄永刚 ML Phase III: 缓慢提升.精细优化.复杂模型 第二阶段就已经接近结束了.首先你的月收益开始减少.你开始要在不同的指标之间做出平衡,你会发现有的涨了而有的却降了.事情变得有趣了 ...

  6. c# 之抽象属性

    抽象属性 属性可以使类.结构.接口的成员,自然也可以是抽象类的抽象属性了,抽象属性同抽象方法一样在派生类中被实现. using System; using System.Collections.Gen ...

  7. Surfaces

    For Developers‎ > ‎Design Documents‎ > ‎Chromium Graphics // Chrome GPU‎ > ‎ Surfaces Goals ...

  8. JAVA程序类加载及其反射机制

    [IT168 技术]当调用java命令运行某个Java程序时,该命令将启动一条Java虚拟机进程,同一个JVM的所有线程,所有变量都处于同一进程里,它们都是用该JVM进程的内存区. 程序运行到最后正常 ...

  9. linux一个网卡添加多个虚IP

    [root@localhost ~]# ifconfig bond0:0 10.0.0.202 netmask 255.255.255.255 broadcast 10.0.0.255 up 摘自:h ...

  10. poi导出excel缩放比例的问题

    某次修改了一下controller里导出清单的表格格式之后,就发现一直有这个问题,今天把手头的活都处理完了就在找问题出在哪,好在导出清单的格式写在了两个controller里,对照一比较发现了问题,s ...