zoukankan      html  css  js  c++  java
  • C++ STD Gems01

    本文是根据油管大神的C++标准库课程的一个学习笔记,该课程主要介绍c++标准库中一些非常有用并且代码经常用到的工具。

    copy 、copy_backward 、copy_n 、copy_if、swap_ranges

    #include <iostream>
    #include <iterator>
    #include <string>
    #include <algorithm>
    #include <vector>
    #include <cctype>
    
    
    template<typename Container>
    void write_to_cout(const Container& container, const char* delimiter = " ")
    {
        std::copy( container.begin(), container.end(),
            std::ostream_iterator<typename Container::value_type>( std::cout, delimiter) );
    }
    
    
    // 测试函数copy
    void test0()
    {
        // init test constainer
        std::vector<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
        std::vector<std::string> b = {"0", "1", "2", "4", "5", "6", "7", "8", "9"};
    
        // wtire initial statements
        write_to_cout(a);
        std::cout << std::endl;
        write_to_cout(b);
        std::cout << std::endl;
    
        //test algorithm
        std::copy(a.begin(), a.begin() + 3, b.begin() + 4);
        write_to_cout(b);
        std::cout << std::endl;
        std::cout << std::endl;
    }
    
    void test1()
    {
        std::vector<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
        std::vector<std::string> b = {"0", "1", "2", "4", "5", "6", "7", "8", "9"};
    
        write_to_cout(a);
        std::cout << std::endl;
        write_to_cout(b);
        std::cout << std::endl;
    
        std::copy(a.begin(), a.end(), std::back_inserter(b));
        write_to_cout(b);
        std::cout << std::endl;
        std::cout << std::endl;
    }
    
    void test2()
    {
        // std::vector<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
        std::vector<std::string> b = {"0", "1", "2", "4", "5", "6", "7", "8", "9"};
    
        // write_to_cout(a);
        // std::cout << std::endl;
        write_to_cout(b);
        std::cout << std::endl;
    
        // test algorithm
        std::copy(b.begin(), b.begin() + 4, b.begin() +3);  // 元素从前往后挨个复制过去
        write_to_cout(b);
        std::cout << std::endl;
        std::cout << std::endl;
    }
    
    void test3()
    {
        std::vector<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
        std::vector<std::string> b = {"0", "1", "2", "4", "5", "6", "7", "8", "9"};
    
        write_to_cout(a);
        std::cout << std::endl;
        write_to_cout(b);
        std::cout << std::endl;
    
        //test algorithm
        std::copy_backward(a.begin(), a.begin() + 2, b.begin() + 3); //从后往前挨个复制过去
        write_to_cout(b);
        std::cout << std::endl;
        std::cout << std::endl;
    }
    
    void test4()
    {
        std::vector<int> a;
        std::copy_n(std::istream_iterator<int>(std::cin), 5, std::back_inserter(a)); // 输入指定的数量的元素
        write_to_cout(a);
        std::cout << std::endl;
        std::cout << std::endl;
    }
    
    void test5()
    {
        std::string a = "HellO, WOrlD";
        std::string b = "wHat are yoU dOinG";
    
        write_to_cout(a);
        std::cout << std::endl;
        write_to_cout(b);
        std::cout << std::endl;
    
        //test algorithm
        std::string uppers;
        // 有条件地复制
        std::copy_if(a.begin(), a.end(), std::back_inserter(uppers), [](unsigned char c){return std::isupper(c);} );  // 为什么直接写std::isupper不行呢
        std::copy_if(b.begin(), b.end(), std::back_inserter(uppers), [](unsigned char c){return std::isupper(c);} );
    
        write_to_cout(uppers);
        std::cout << std::endl << std::endl;
    }
    
    void test6()
    {
        std::vector<std::string> a = {"zero", "one", "two", "three", "four", "five", "six"};
        std::vector<std::string> b = {"0", "1", "2", "4", "5", "6", "7", "8", "9"};
    
        write_to_cout(a);
        std::cout << std::endl;
        write_to_cout(b);
        std::cout << std::endl;
    
        //test algorithm
        std::swap_ranges(a.begin(), a.begin() + 3, b.begin());  //作用于copy等效
        write_to_cout(b);
        std::cout << std::endl << std::endl;
    
    }
    
    int main()
    {
        test0(); 
        test1();
        test2();
        test3();
        test4();
        test5();
        test6();
        return 0;
    }
    
  • 相关阅读:
    iOS
    关于HTTP协议学习(三)
    关于HTTP协议学习(二)
    关于HTTP协议学习(一)
    Swift之Swift编码规范
    老罗学习MVC之旅:MVC组件分析
    android 左右翻页
    android 检测网络是否可用
    android 在线升级借助开源中国App源码
    android 渐变展示启动屏
  • 原文地址:https://www.cnblogs.com/codemeta-2020/p/12111605.html
Copyright © 2011-2022 走看看