c++ STD Gems07

reverse、rotate、permutation

#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<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
    std::vector<std::string> b = {"0", "1", "2", "3", "4", "5", "6"};

    write_to_cout(a);
    std::cout << std::endl;
    //test
    std::rotate(a.begin(), a.begin() + 3, a.end());
    write_to_cout(a);
    std::cout << std::endl << std::endl;
}

void test1()
{
    std::vector<std::string> b = {"0", "1", "2", "3", "4", "5", "6"};

    write_to_cout(b);
    std::cout << std::endl;

    // test
    std::reverse(b.begin(), b.end());
    write_to_cout(b);
    std::cout << std::endl << std::endl;
}

void test2()
{
    std::vector<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
    write_to_cout(a);
    std::cout << std::endl;

    //test algorithm
    std::mt19937 rng( std::random_device{}() );
    std::shuffle(a.begin(), a.end(), rng);

    write_to_cout(a);
    std::cout << std::endl << std::endl;
}

void test3()
{
    std::string s = "abc";
    std::string s1 = "adc";
    std::string s2 = "acb";

    //test 全排列
    while( std::next_permutation(s.begin(), s.end() ) )
    {
        std::cout << s << "\n";
    }

    std::cout << std::endl;
    std::cout << std::is_permutation(s.begin(), s.end(), s1.begin() ) << std:: endl;
    std::cout << std::is_permutation(s.begin(), s.end(), s2.begin() ) << std:: endl;    

}

int main()
{
    test0();
    test1();
    test2();
    test3();

    return 0;
}

原文地址:https://www.cnblogs.com/codemeta-2020/p/12121206.html

时间: 2025-01-17 22:16:11

c++ STD Gems07的相关文章

实战c++中的智能指针unique_ptr系列-- 使用std::unique_ptr代替new operator(错误:‘unique_ptr’ is not a member of ‘std’)

写了很多篇关于vector的博客,其实vector很便捷,也很简单.但是很多易错的问题都是vector中的元素为智能指针所引起的.所以决定开始写一写关于智能指针的故事,尤其是unique_ptr指针的故事. 这是个开始,就让我们使用std::unique_ptr代替new operator吧! 还是用程序说话: #include<iostream> int main() { while (true) int *x = new int; } 看下任务管理器中的内存: 此时使用智能指针unique

c++11 Enable multithreading to use std::thread: Op

gcc4.6以后对于ld自动加上了as-needed选项.所以编译选项应该变成: g++ -Wl,--no-as-needed -std=c++11 -pthread a.cpp 这样就没有问题了!

在codeblocks 下,C++编译不成功一直出现“undefined reference to `std::cout&#39;|

自己搞了好久才知道,编辑c++,要用g++ 希望对大家有帮助 在codeblocks 下,C++编译不成功一直出现"undefined reference to `std::cout'|

[C++11 并发编程] 08 - Mutex std::unique_lock

相对于std::lock_guard来说,std::unique_lock更加灵活,std::unique_lock不拥有与其关联的mutex.构造函数的第二个参数可以指定为std::defer_lock,这样表示在构造unique_lock时,传入的mutex保持unlock状态.然后通过调用std::unique_lock对象的lock()方法或者将将std::unique_lock对象传入std::lock()方法来锁定mutex. #include <mutex> class some

at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields异常

at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:666) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156) at com.fasterxml.jackson.databind.ser.impl.IndexedListSe

宽字符std::wstring的长度和大小问题?sizeof(std::wstring)是固定的32,说明std::wstring是一个普通的C++类,而且和Delphi不一样,没有负方向,因为那个需要编译器的支持

std::wstring ws=L"kkkk";    int il=ws.length();    int ia=sizeof(ws);    int ib=sizeof("dddd");    int ic=sizeof(L"kkkk");输出为    il=4,ia=32,ib=5,ic=10为什么ia=32 ?wstring到底对L"kkkk"做了什么? http://www.debugease.com/vc/2171

利用std::allocator实现自定义的vector类

std::allocator即空间配置器,用于内存分配.更多的细节建议大家研究相关源码. 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正. 1 #include <iostream> 2 #include <memory> 3 using std::cout; 4 using std::endl; 5 6 template <typename Tp> 7 class Vector 8 { 9 public: 10 Vector

用链表std::list实现队列

// generic queue implemented with doubly linked list  #include<iostream> #include<string> #include <list> using std::cout; using std::endl; using std::string; template<class T> class Queue { public:     Queue() {      }     void cl

解决Eclipse中C++代码显示Symbol &amp;#39;std&amp;#39; could not be resolved的问题

第一次在Eclipse中写C++代码,写了一个简单的hello world程序,还没有等我编译.就报出了各种错误,但是这么简单的代码.怎么可能这么多错误.于是没有理会.编译执行后,能够正常输出!!!Hello World!!!,但是我的代码中还是有非常多红叉,把鼠标放在上面显示:Symbol 'std' could not be resolved 这种信息. 于是问题来了.怎样解决? 方法:写完库函数以后立刻保存.这样写之后的代码就不会报错了 比如:-->首先写#include <iostre