美文网首页C++
c++STL使用序列容器--Apple的学习笔记

c++STL使用序列容器--Apple的学习笔记

作者: applecai | 来源:发表于2019-10-22 21:11 被阅读0次

    《C++标准模板库实战》的第二章看完了。习题操练,用的c++14编译的。

    一,P87 习题2

    可以从键盘读取任意个数的城市名称,然后以std::string对象的形式把它们存放到vector<T>容器中。以升序的形式对城市名排序,并且每行几个地列出它们,每个一个字段的长度固定,可以适应最长的城市名。按他们的开头字母分组输出,每组之间用一个空行隔开。

    二,没找到参考答案,我的code如下。

    备份下等熟练c++11后再回头看,肯定可以再优化的。

    #include <iostream>                              // For standard streams
    #include <algorithm>                             // For copy()
    #include <string>                                // For string classes
    #include <iterator>                              // For front_insert_iterator & stream iterators
    #include <vector>
    #include <iomanip>
    using std::string;
    
    //自定义升序排序函数  
    bool sortFun(string p1, const string p2)
    {
        return p1 < p2;
    }
    int main()
    {
      std::vector<string> names;
      // cin输入,按顺序放入向量
      std::cout << "Enter first names separated by spaces. Enter Ctrl+Z on a new line to end:\n";
      std::copy(std::istream_iterator < string > {std::cin}, std::istream_iterator < string > {}, std::back_inserter(names));
      std::cout << "\nIn reverse order, the names you entered are:\n";
      // 升序排序
      sort(names.begin(), names.end(), sortFun);
      // 获取最大城市长度
      uint8_t maxlen=0;
      for(auto item:names)
      {
        if(item.length()>maxlen)
        {
          maxlen=item.length();
        }
      }
      // 输出
      std::cout <<"after sort:"<< std::endl;
      char old='a';
      for(auto item:names)
      {
        if(item.at(0)==old)
        {
        }
        else
        {
          // 头字母不同则换行
          std::cout <<std::endl;
        }
        // 设置长度对齐
        std::cout <<std::left<<std::setw(maxlen)<<item;
        old=item.at(0);
      }
      return 0;
    }
    

    三,运行结果

    Enter first names separated by spaces. Enter Ctrl+Z on a new line to end:
    Tianjing Hebei Henan Taibei Beijing Shanghai
    ^Z

    In reverse order, the names you entered are:
    after sort:

    Beijing
    Hebei Henan
    Shanghai
    Taibei Tianjing

    相关文章

      网友评论

        本文标题:c++STL使用序列容器--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/anucvctx.html