C++11总结

数据结构

算法

  • future

A future is an object that can retrieve a value from some provider object or function, properly synchronizing this access if in different threads.

future是个可以从供应者对象或函数中检索值得对象,如果在不同线程则可以正确地同步访问。

常和package_task、promise一起使用。

  • package_task

A packaged_task wraps a callable element and allows its result to be retrieved asynchronously.

package_task封装一个可调节点,允许他的结果被异步检索。

  • promise

A promise is an object that can store a value of type T to be retrieved by a future object (possibly in another thread), offering a synchronization point.

promise是一个对象,存储T类型数据,并通过future对象检索(可能在另一个线程)。提供一个同步点

  • std::async()
 /*
template<class Fn, class... Args>
future<typename result_of<Fn(Args...)>::type> async(launch policy, Fn&& fn, Args&&...args);
 
参数:
policy:用于指定函数是调用策略
        1. std::launch::async 传递的可调用对象异步执行;
        2. std::launch::deferred 传递的可调用对象同步执行;
        3. std::launch::async | std::launch::deferred 可以异步或是同步,取决于操作系统,我们无法控制;
        4. 如果我们不指定策略,则相当于(3)
 
fn:函数,lambda函数,函数对象等
args:函数fn的调用参数
 
返回值:
基于fn返回值类型的future对象
*/
///

std::future<bool> fut = std::async (is_prime,313222313);

  std::cout << "Checking whether 313222313 is prime.\n";
  // ...

  bool ret = fut.get();      // waits for is_prime to return
  • std::atomic

保护变量时效率更高atomic<long> total = 0;

1. find

find()算法的作用是在指定的一段序列中查找某个数,包含三个参数,前两个参数是表示元素范围的迭代器,第三个参数是要查找的值。

   例:fing(vec.begin(), vec.end(), val); //在vec中查找值val,该val可以是数字、字符串。

2. count();

count()算法的作用是查看给定序列中给定值出现的次数,同样包含三个参数,前两个参数是表示元素范围的迭代器,第三个参数是要查找的值。

   例:count(vec1.begin(), vec1.end(), 2);//在vec1中查看2出现的次数。

3. accumulate()

accumulate()函数的作用是计算指定范围中各个数相加的和。包含三个参数,前两个参数是求和的序列范围,第三个参数是和的初始值。

   例:accumulate(vec1.begin(), vec1.end(), 0);//计算vec1中各个数相加的总和,和的初始值为0;

4.equal();

equal()算法的作用是确定两个序列是否保存相同的值,此算法接受三个迭代器,前两个迭代器表示第一个序列中元素的范围,第三个迭代器表示第二个序列的手元素。如果相等,则返回true, 否则返回false;

   equal(vec.begin(), vec.end(), vec2.begin());//比较vec和vec2中的元素是否相同。

5.fill();

fill()算法的作用是对一个范围内的所有元素赋值,包含三个参数,前两个参数接受一对迭代器表示一个范围,第三个迭代器接受一个值。

   例:fill(vec.begin(), vec.end(), "");//将vec中的所有元素都置为空。

6.copy();

copy()算法将输入范围中的元素拷贝到目的序列中。包括三个参数,前两个表示一个输入范围,第三个表示序列的起始位置。

   例:int a1[] = {0,1,2,3,4,5,6,7,8,9};

        int a2[sizeof(a1)/sizeof(*a1)];

        //ret指向拷贝到a2的为元素之后的位置

        auto ret = copy(begin(a1), end(a1), a2);//把a1的内容拷贝到a2.

  • std::copy_if:复制满足指定条件的元素到另一个容器。
  • std::move:将元素从一个容器移动到另一个容器(move),而非拷贝(copy)。
  • std::move_backward:类似std::move,但是从范围的末尾开始操作,适合某些特定的容器操作。

7.replace();

replace()算法的作用是将给定序列中所有等会给定值的元素都改为另一个值,此算法接收四个参数,前两个是迭代器,表示输入序列范围,第三个是表示要搜索的      值,第四个是要换的新值。

   例:replace(vec.begin(), vec.end(), "", "test");//将vec中的空字符串改为test。

   如果我们需要保证原序列的值不变,则可以使用replace_copy()算法,使原序列不变,将改变后的序列值拷贝给新容器。

   例:replace_copy(vec.begin(), vec.end(),back_inserter(vec2), "", "test");//将修改后的新序列保存到vec2中,原序列值不变。

8.sort();

sort()算法的作用是重新排列输入的序列中的元素,它是按照字典序列来重新排布序列。

   例:vector<string> vec = {"the", "quick", "red", "for", "jump","over", "the", "slow", "red", "turtle"};

         sort(vec.begin(), vec.end());

        执行完后的结果:for jump over quick red slow the the turtle

9.for_each();

for_each()算法的主要作用是打印输出序列。接收三个参数,前两个为打印元素的范围,后一个为一个可调用对象。

    例:for_each(wc, vec.end(), [](const string &s){cout << s << " ";});

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值