C++Primer(第10章课后程序题源代码)

来源:互联网 发布:plc编程标准 编辑:程序博客网 时间:2024/05/17 23:25

10.1

#include<iostream>#include<fstream>#include<vector>#include<algorithm>using namespace std;int main(int argc,char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<int> vi;    int val;    while (in >> val)    {        vi.push_back(val);    }    cout << "请输入要搜索的整数:";    cin >> val;    cout << "序列中包含" << count(vi.begin(), vi.end(), val) << "个" << val;    return 0;}
#include<iostream>#include<fstream>#include<vector>#include<algorithm>using namespace std;int main(int argc,char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<int> vi;    int val;    while (in >> val)    {        vi.push_back(val);    }    cout << "请输入要搜索的整数:";    cin >> val;    int c = 0;    for (auto iter = vi.begin(); iter != vi.end(); iter++)        if (*iter == val)            c++;    cout << "序列中包含" <<c << "个" << val;    return 0;}

10.2

#include<iostream>#include<fstream>#include<vector>#include<list>#include<algorithm>#include<string>using namespace std;int main(int argc,char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    list<string> ls;    string word;    while (in >> word)        ls.push_back(word);    cout << "请输入要搜索的字符串:";    cin >> word;    cout << "序列中包含" << count(ls.begin(), ls.end(), word) << "个" << word;    return 0;}

10.3

#include<iostream>#include<fstream>#include<vector>#include<list>#include<algorithm>#include<string>#include<numeric>using namespace std;int main(int argc,char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<int> vi;    int val;    while (in >> val)        vi.push_back(val);    cout << "序列中整数之和为" << accumulate(vi.begin(), vi.end(), 0) << endl;    return 0;}

10.4

#include<iostream>#include<fstream>#include<vector>#include<list>#include<algorithm>#include<string>#include<numeric>using namespace std;int main(int argc,char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<double> vd;    double val;    while (in >> val)        vd.push_back(val);    cout << "序列中浮点数之和为" << accumulate(vd.begin(), vd.end(),0.0) << endl;    return 0;}

10.5

#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<string.h>using namespace std;int main(int argc, char *argv[]){    char *p[] = { "Hello", "World", "!" };    char *q[] = { strdup(p[0]), strdup(p[1]), strdup(p[2]) };    char *r[] = { p[0], p[1], p[2] };    cout << equal(begin(p), end(p), q) << endl;    cout << equal(begin(p), end(p), r) << endl;    return 0;}

10.6

#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<vector>#include<fstream>using namespace std;int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<int> vi;    int val;    while (in >> val)    {        vi.push_back(val);        cout << val << " ";    }    cout << endl;    fill_n(vi.begin(), vi.size(), 0);    for (auto iter = vi.begin(); iter != vi.end(); iter++)        cout << *iter << " ";    return 0;}

10.7

#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<vector>#include<fstream>#include<list>#include<iterator>using namespace std;int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    list<int> lst;    vector<int> vec;    int val;    while (in >> val)    {        lst.push_back(val);    }    copy(lst.begin(), lst.end(), back_inserter(vec));    cout << equal(lst.begin(), lst.end(), vec.begin()) << endl;    for (auto iter = vec.begin(); iter != vec.end(); iter++)        cout << *iter << " ";    cout << endl;    return 0;}
#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<vector>#include<fstream>#include<list>#include<iterator>using namespace std;int main(int argc, char *argv[]){    vector<int> vec;    vec.reserve(10);    fill_n(back_inserter(vec), 10, 0);    for (auto iter = vec.begin(); iter != vec.end(); iter++)        cout << *iter << " ";    cout << endl;    return 0;}

10.9

#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<vector>#include<fstream>#include<list>#include<iterator>#include<string>using namespace std;inline void output_words(vector<string> &words){    for (auto iter = words.begin(); iter != words.end(); iter++)        cout << *iter << " ";    cout << endl;}void elimDups(vector<string> &words){    output_words(words);    sort(words.begin(), words.end());    output_words(words);    auto end_unique = unique(words.begin(), words.end());    output_words(words);    words.erase(end_unique, words.end());    output_words(words);}int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<string> words;    string word;    while (in >> word)    {        words.push_back(word);    }    elimDups(words);    return 0;}

10.11

#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<vector>#include<fstream>#include<list>#include<iterator>#include<string>using namespace std;inline void output_words(vector<string> &words){    for (auto iter = words.begin(); iter != words.end(); iter++)        cout << *iter << " ";    cout << endl;}bool isShorter(const string &s1, const string &s2){    return s1.size() < s2.size();}void elimDups(vector<string> &words){    output_words(words);    sort(words.begin(), words.end());    output_words(words);    auto end_unique = unique(words.begin(), words.end());    output_words(words);    words.erase(end_unique, words.end());    output_words(words);    stable_sort(words.begin(),words.end(), isShorter);    output_words(words);}int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<string> words;    string word;    while (in >> word)    {        words.push_back(word);    }    elimDups(words);    return 0;}

10.12

10.13

#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<vector>#include<fstream>#include<list>#include<iterator>#include<string>using namespace std;inline void output_words(vector<string>::iterator beg,vector<string>::iterator end){    for (auto iter = beg;iter!=end; iter++)        cout << *iter << " ";    cout << endl;}bool five_or_more(const string &s1){    return s1.size() >= 5;}int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    vector<string> words;    string word;    while (in >> word)        words.push_back(word);    output_words(words.begin(), words.end());    auto iter = partition(words.begin(), words.end(), five_or_more);    output_words(words.begin(), iter);    return 0;}

10.14

#include<iostream>using namespace std;int main(int argc,char *argv[]){    auto sum = [](int a, int b){return a + b; };    cout << sum(1, 1) << endl;    return 0;}

10.15

#include<iostream>using namespace std;void add(int a){    auto sum = [a](int b){return a + b; };    cout << sum(1) << endl;}int main(int argc,char *argv[]){    add(4);    add(5);    return 0;}

10.21

#include<iostream>#include<algorithm>using namespace std;void mutable_lambda(void){    int i = 5;    auto f = [i]()mutable->bool{if (i > 0){ i--; return false; } else return  true; };    for (int j = 0; j < 6; j++)        cout << f() << " ";    cout << endl;}int main(int argc, char *argv[]){    mutable_lambda();    return 0;}

10.22

#include<iostream>#include<fstream>#include<vector>#include<string>#include<algorithm>#include<functional>using namespace std;using namespace std::placeholders;string make_plural(size_t ctr, const string &word, const string &ending){    return (ctr == 1) ? word : word + ending;}inline void output_words(vector<string> &words){    for (auto iter = words.begin(); iter != words.end(); iter++)        cout << *iter << " ";    cout << endl;}bool check_size(const string &s, string::size_type sz){    return s.size() >= sz;}void biggies(vector<string>&words, vector<string>::size_type sz){    output_words(words);    auto bc = count_if(words.begin(), words.end(), bind(check_size, _1, sz));    cout << bc << " " << make_plural(bc, "word", "s") << " of length " << sz << " or longer" << endl;}int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败" << endl;        exit(1);    }    vector<string> words;    string word;    while (in >> word)        words.push_back(word);    biggies(words, 6);    system("pause");    return 0;}

10.24

#include<iostream>#include<fstream>#include<vector>#include<string>#include<algorithm>#include<functional>using namespace std;using namespace std::placeholders;string make_plural(size_t ctr, const string &word, const string &ending){    return (ctr == 1) ? word : word + ending;}bool check_size(const string &s, string::size_type sz){    return s.size() <= sz;}void biggies(vector<int> &vc, const string &s){    auto p = find_if(vc.begin(), vc.end(), bind(check_size, s, _1));    cout << "第" << p - vc.begin() + 1 << "个数" << *p << "大于等于" << s << "的长度" << endl;}int main(int argc, char *argv[]){    vector<int> vc = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };    biggies(vc, "Hello");    biggies(vc, "everyone");    biggies(vc, "!");    system("pause");    return 0;}

10.25

#include<iostream>#include<fstream>#include<vector>#include<string>#include<algorithm>#include<functional>using namespace std;using namespace std::placeholders;string make_plural(size_t ctr, const string &word, const string &ending){    return (ctr == 1) ? word : word + ending;}void elimDups(vector<string> &words){    sort(words.begin(), words.end());    auto end_unique = unique(words.begin(), words.end());    words.erase(end_unique, words.end());}bool check_size(const string &s, string::size_type sz){    return s.size() >= sz;}void biggies(vector<string>&words, vector<string>::size_type sz){    elimDups(words);    for_each(words.begin(), words.end(), [](const string &s){cout << s << " "; });    cout << endl;    auto wc = partition(words.begin(), words.end(), bind(check_size, _1, sz));    auto count = wc - words.begin();    cout << count << " " << make_plural(count, "word", "s") << " of length " << sz << " or longer" << endl;    for_each(words.begin(), wc, [](const string &s){cout << s << " "; });    cout << endl;}int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败" << endl;        exit(1);    }    vector<string> words;    string word;    while (in >> word)        words.push_back(word);    biggies(words, 6);    system("pause");    return 0;}

10.27

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>using namespace std;int main(int argc, char *argv[]){    vector<int> vi = { 1, 2, 2, 3, 4, 5, 5, 6 };    list<int> li;    unique_copy(vi.begin(), vi.end(), inserter(li, li.begin()));    for (auto v : li)    {        cout << v << " ";    }    cout << endl;    return 0;}

10.28

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>using namespace std;int main(int argc, char *argv[]){    vector<int> vi = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };    list<int> li1, li2, li3;    unique_copy(vi.begin(), vi.end(), inserter(li1, li1.begin()));    for (auto v : li1)        cout << v << " ";    cout << endl;    unique_copy(vi.begin(), vi.end(), back_inserter(li2));    for (auto v : li2)        cout << v << " ";    cout << endl;    unique_copy(vi.begin(), vi.end(), front_inserter(li3));    for (auto v : li3)        cout << v << " ";    cout << endl;    return 0;}

10.29

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>#include<fstream>#include<string>using namespace std;int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    istream_iterator<string> in_iter(in);    istream_iterator<string> eof;    vector<string> words;    while (in_iter != eof)        words.push_back(*in_iter++);    for (auto word : words)        cout << word << " ";    cout << endl;    return 0;}

10.30

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>#include<fstream>#include<string>using namespace std;int main(int argc, char *argv[]){    istream_iterator<int> in_iter(cin);    istream_iterator<int> eof;    vector<int> vi;    while (in_iter != eof)        vi.push_back(*in_iter++);    sort(vi.begin(), vi.end());    ostream_iterator<int> out_iter(cout, " ");    copy(vi.begin(), vi.end(), out_iter);    return 0;}

10.31

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>#include<fstream>#include<string>using namespace std;int main(int argc, char *argv[]){    istream_iterator<int> in_iter(cin);    istream_iterator<int> eof;    vector<int> vi;    while (in_iter != eof)        vi.push_back(*in_iter++);    sort(vi.begin(), vi.end());    ostream_iterator<int> out_iter(cout, " ");    unique_copy(vi.begin(), vi.end(), out_iter);    return 0;}

10.32

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>#include<fstream>#include<string>#include<numeric>#include"Sales_data.h"using namespace std;int main(){    vector<Sales_data>vs;    istream_iterator<Sales_data> in_iter(cin);    istream_iterator<Sales_data> eof;    while (in_iter != eof)        vs.push_back(*in_iter++);    if (vs.empty())    {        std::cerr << "No data?" << std::endl;        return -1;    }    sort(vs.begin(), vs.end(), compareIsbn);    auto l = vs.begin();    while (l != vs.end())    {        auto item = *l;        auto r = find_if(l + 1, vs.end(), [item](const Sales_data &item1){return item1.isbn() != item.isbn(); });        cout << accumulate(l + 1, r, item) << endl;        l = r;    }    return 0;}

10.33

#include<iostream>#include<iterator>#include<vector>#include<list>#include<algorithm>#include<fstream>#include<string>#include<numeric>#include"Sales_data.h"using namespace std;int main(int argc, char *argv[]){    if (argc != 4)    {        cout << "用法:execise.exe in file ";        cout<<"out_file1 out_file2" << endl;        return -1;    }    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败!" << endl;        exit(1);    }    ofstream out1(argv[2]);    if (!out1)    {        cout << "打开输出文件1失败!" << endl;        exit(1);    }    ofstream out2(argv[3]);    if (!out2)    {        cout << "打开输出文件2失败!" << endl;        exit(1);    }    istream_iterator<int> in_iter(in);    istream_iterator<int> eof;    ostream_iterator<int> out_iter1(out1, " ");    ostream_iterator<int> out_iter2(out2, "\n");    while (in_iter != eof)    {        if (*in_iter & 1)            *out_iter1++ = *in_iter;        else *out_iter2++ = *in_iter;        in_iter++;    }    return 0;}

10.34

#include<iostream>#include<fstream>#include<vector>#include<algorithm>using namespace std;int main(int argc, char *argv[]){    if (argc != 2)    {        cout << "用法:execise.exe in_file" << endl;        return -1;    }    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败! " << endl;        exit(1);    }    vector<int> vi;    int v;    while (in >> v)        vi.push_back(v);    for (auto r_iter = vi.crbegin(); r_iter != vi.crend();++r_iter)        cout << *r_iter << " ";    cout << endl;    return 0;}

10.35

#include<iostream>#include<fstream>#include<vector>#include<algorithm>using namespace std;int main(int argc, char *argv[]){    if (argc != 2)    {        cout << "用法:execise.exe in_file" << endl;        return -1;    }    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败! " << endl;        exit(1);    }    vector<int> vi;    int v;    while (in >> v)        vi.push_back(v);    for (auto r_iter = vi.cend(); r_iter != vi.begin();)        cout << *(--r_iter) << " ";    cout << endl;    return 0;}

10.36

#include<iostream>#include<fstream>#include<vector>#include<algorithm>#include<list>using namespace std;int main(int argc, char *argv[]){    list<int> li = { 0, 1, 2, 0, 3, 4, 5, 0, 6 };    auto last_z = find(li.rbegin(), li.rend(), 0);    last_z++;    int p = 1;    for (auto iter = li.begin(); iter != last_z.base(); iter++, p++);    if (p >= li.size())        cout << "容器中没有0" << endl;    else        cout << "最后一个0在第" << p << "个位置" << endl;    return 0;}
#include<iostream>#include<fstream>#include<vector>#include<algorithm>#include<list>using namespace std;int main(int argc, char *argv[]){    list<int> li = { 0, 1, 2, 0, 3, 4, 5, 0, 6 };    auto prev = find(li.begin(), li.end(), 0);    if (prev == li.end())        cout << "容器中没有0" << endl;    else    {        auto curr = prev;        while (curr != li.end())        {            prev = curr;            curr++;            curr = find(curr, li.end(), 0);        }        int p = 1;        for (auto iter = li.begin(); iter != prev; iter++, p++);        cout << "最后一个0在第" << p << "个位置" << endl;    }    return 0;}

10.37

#include<iostream>#include<fstream>#include<vector>#include<algorithm>#include<list>#include<iterator>using namespace std;int main(int argc, char *argv[]){    ostream_iterator<int> out_iter(cout, " ");    vector<int> vi = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };    copy(vi.begin(), vi.end(), out_iter);    cout << endl;    list<int> li;    vector<int>::reverse_iterator re(vi.begin() + 2);    vector<int>::reverse_iterator rb(vi.begin() + 7);    copy(rb, re, back_inserter(li));    copy(li.begin(), li.end(), out_iter);    cout << endl;    return 0;}
#include<iostream>#include<fstream>#include<vector>#include<algorithm>#include<list>#include<iterator>using namespace std;int main(int argc, char *argv[]){    ostream_iterator<int> out_iter(cout, " ");    vector<int> vi = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };    copy(vi.begin(), vi.end(), out_iter);    cout << endl;    list<int> li;    copy(vi.rbegin() + vi.size() - 7, vi.rbegin() + vi.size() - 3 + 1, back_inserter(li));    copy(li.begin(), li.end(), out_iter);    cout << endl;    return 0;}

10.42

#include<iostream>#include<fstream>#include<vector>#include<algorithm>#include<list>#include<iterator>#include<string>using namespace std;inline void output_words(list<string> &words){    for (auto iter = words.begin(); iter != words.end(); iter++)        cout << *iter << " ";    cout << endl;}void elimDups(list<string> &words){    output_words(words);    words.sort();    output_words(words);    words.unique();    output_words(words);}int main(int argc, char *argv[]){    ifstream in(argv[1]);    if (!in)    {        cout << "打开输入文件失败" << endl;        exit(1);    }    list<string> words;    string word;    while (in >> word)        words.push_back(word);    elimDups(words);    return 0;}
0 0
原创粉丝点击