美文网首页
c++primer 10.1-10.10

c++primer 10.1-10.10

作者: 青吟乐 | 来源:发表于2019-05-10 18:05 被阅读0次

    10.1,1.02都在下下面的代码中

    #include <iostream>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    int main()
    {
        //10.1
        vector<int> vec={1,2,3,4,5,6,7,8,9,0,2,3,1,2,3,45,23};
        int val=2;
        auto count1 = count(vec.begin(),vec.end(),val);
        cout<<count1<<endl;
    
        //10.2
        vector<string> vec1={"xxxx","aaaa","xxxx"};
        string val2="xxxx";
        auto count2 = count(vec1.begin(),vec1.end(),val2);
        cout<<count2<<endl;
        return 0;
    }
    

    10.3

    #include <iostream>
    #include <vector>
    #include <numeric>
    using namespace std;
    int main()
    {
        vector<int>  vi = {1,2,3,4,5};
        int sum=accumulate(vi.cbegin(),vi.cend(),0);
        cout<<sum<<endl;
        
        return 0;
    }
    

    10.4
    0是int类型,想要double类型的返回值要给0.0
    10.5
    两个c语言风格的数组的名字保存的是指向首字符的指针,所以equal两个c语言风格的字符串实际上是equal两个字符串的指针
    10.6

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main()
    {
        std::vector<int>  vi {1,2,3,4,5};
        std::fill_n(vi.begin(),vi.size(),0);
        for(int  c:vi){
            std::cout<<c<<" ";
        }
    
        return 0;
    }
    
    

    10.7
    (1)copy要保证本容器有足够大空间放拷贝目标容器
    所以在两个容器进行初始化之后要再 加一句

        vec.reserve(lst.size());
    

    (2)
    从语法来讲这段代码没有错误,编译器正常通过
    但是从逻辑方面讲 ,因为reserve只改变容器的预分配空间不改变容器大小,所以这里遍历容器不会有输出,应该改为

     vector<int> vec;
        vec.resize(10);
        fill_n(vec.begin(), 10, 0);
    

    再进行输出就有结果了
    10.8
    插入迭代器不是标准库算法,它是包含在头文件"iterator"中的方法
    10.9

    #include <iostream>
    #include <vector>
    #include<list>
    #include<fstream>
    #include <algorithm>
    using namespace std;
    
    void elimDups(vector<string> &word){
        //按字典排序word,便于查找重复单词
        sort(word.begin(),word.end());
        //unique重排输入范围,使得每个单词出现一次
        //unique返回最后一个不重复位置之后的迭代器
        auto end_unique = unique(word.begin(),word.end());
        //用erase删除后面的无用元素
        word.erase(end_unique,word.end());
    }
    int main()
    {
        ifstream ifs("C:\\study\\c++test\\endless.txt");
    
        string str;
        vector<string> vec;
        while(ifs>>str){
            vec.push_back(str);
        }
        for(auto c: vec){
            cout<<c<<" ";
        }
        cout<<endl;
    
        elimDups(vec);
        for(auto c: vec){
            cout<<c<<" ";
        }
        return 0;
    }
    

    10.10
    对所有的算法提供统一的参数进行操作,方便管理

    相关文章

      网友评论

          本文标题:c++primer 10.1-10.10

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