C++ STD Gems06
generate、generate_n、sample、iota
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <random>
template<class Container>
void write_to_cout(Container& container, const char* delimiter = " ")
{
std::copy(container.begin(), container.end(),
std::ostream_iterator<typename Container::value_type>(std::cout, delimiter) );
}
void test0()
{
std::vector<int> v(5, 10);
v.reserve(10);
std::fill_n(std::back_inserter(v), 10, 111);
write_to_cout(v);
std::cout << std::endl << std::endl;
std::fill(v.begin() + 5, v.begin() + 7, 13);
write_to_cout(v);
std::cout << std::endl << std::endl;
}
void test1()
{
std::vector<int> v(10);
std::iota(v.begin(), v.end(), 0);
write_to_cout(v);
std::cout << std::endl << std::endl;
}
void test2()
{
std::mt19937 rng( std::random_device{}() );
std::uniform_int_distribution<int> d( 0,20 );
std::vector<int> v;
std::generate_n( std::back_inserter(v), 5, [val = 0]() mutable
{
const auto old = val;
val += 3;
return old;
} );
write_to_cout(v, " | ");
std::cout << std::endl << std::endl;
}
void test3()
{
std::vector<std::string> b = {"zero", "one", "two", "three", "four", "five", "six", "seven"};
std::mt19937 rng( std::random_device{}() );
write_to_cout(b);
std::cout << std::endl;
std::vector<std::string> v;
// test algrithm c++17
std::sample( b.begin(), b.end(), back_inserter(v), 4, rng );
write_to_cout(v);
std::cout << std::endl << std::endl;
}
int main()
{
test0();
test1();
test2();
test3();
return 0;
}
C++ STD Gems06的更多相关文章
- 【NX二次开发】NX内部函数,libuifw.dll文件中的内部函数
本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: void U ...
- C++ std::set
std::set template < class T, // set::key_type/value_type class Compare = less<T>, // set::k ...
- C++ std::priority_queue
std::priority_queue template <class T, class Container = vector<T>, class Compare = less< ...
- C++ std::queue
std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...
- C++ std::multimap
std::multimap template < class Key, // multimap::key_type class T, // multimap::mapped_type class ...
- C++ std::map
std::map template < class Key, // map::key_type class T, // map::mapped_type class Compare = less ...
- C++ std::list
std::list template < class T, class Alloc = allocator > class list; List Lists are sequence co ...
- C++ std::forward_list
std::forward_list template < class T, class Alloc = allocator > class forward_list; Forward li ...
- C++ std::deque
std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...
随机推荐
- MyEclipse插件github安装使用
MyEclipse插件github安装使用 网络上的介绍一堆堆的,但是自己尝试了下,发现问题很多,就动手做个教程. 大纲 1.git客户端安装 2.ssh配置 3.egit安装配置 4.参考资料 ...
- C# FTp 上传,下载
public class FtpHelper { string ftpServerIP; string ftpRemotePath; string ftpUserID; string ftpPassw ...
- PYTHON __main__
#importby.py if __name__ =='__main__': print '>>>>>>>1' if __name__ =="imp ...
- swoole之创建子进程
一.代码 <?php /** * 进程就是正在运行的程序的一个实例 * 比如,在某个终端中执行一个PHP脚本,可以认为就是开启了一个进程,会有对应的进程id(pid) * * swoole进程与 ...
- arm linux 移植 jpeg
背景: host平台 :Ubuntu 16.04 arm平台 : S5P6818 jpeg :v9c arm-gcc :4.8.1 主机准备: 运行以下脚本: ## # Copyright By Sc ...
- 7.9 规划Varnish缓存
./varnishlog -i VCL_LOG
- 实验吧-web-Guess Next Session(session简介)
看代码: <?php session_start(); if (isset ($_GET['password'])) { if ($_GET['password'] == $_SESSION[' ...
- jmeter常见错误及解决方法
jmeter常见错误: 错误一: Response code: Non HTTP response code: java.net.SocketTimeoutException Response m ...
- Linux系统sda变sdb的解决
起因 我的电脑有一个128G的固态以及一个500G的机械,我将系统安装在128G固态中,于是将500G的机械(/dev/sdb)挂在在/home目录下,安装完系统后执行lsblk命令 NAME MAJ ...
- jsp与spring mvc后台controller间参数传递处理之总结
在编程过程中,最容易出现问题及卡壳的地方,往往是各层之间接缝处,接缝处往往存在着各种各样的参数传递,数据转换和格式化,参数很好的传递并正确接收过来之后就是复杂逻辑之间的处理了,所以为了避免多种问题占用 ...