习题10-1
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
void main()
{
int a[10] = { 1,2,3,4,5,5,3,2,3,4 };
vector<int> vec(a,a+10);
cout << count(vec.begin(), vec.end(), 5) << endl;
cout << count(vec.begin(), vec.end(), 3) << endl;
}
习题10-2
#include<algorithm>
#include<list>
#include<string>
#include<iostream>
using namespace std;
void main()
{
list<string> vec = { "1","2","3","3" };
cout << count(vec.begin(), vec.end(), "3") << endl;
cout << count(vec.begin(), vec.end(), "1") << endl;
}
习题10-3
#include<algorithm>
#include<vector>
#include<numeric>
#include<iostream>
using namespace std;
void main()
{
vector<int> vec = { 1,2,3,4,6};
cout << accumulate(vec.begin(), vec.end(), 0) << endl;
}
习题10-4
结果会是int型;
习题10-5
C风格字符串是用指向字符的指针表示的,因此会比较两个指针的值(地址)。
习题10-6
#include<algorithm>
#include<vector>
#include<numeric>
#include<iostream>
using namespace std;
void main()
{
vector<int> vec = { 1,2,3,4,6};
fill_n(vec.begin(), vec.size(), 0);
for (auto it = vec.begin(); it != vec.end(); ++it)
cout << *it << " ";
}
习题10-7
(a)错误;copy 时必须保证目标目的序列至少要包含与输入序列一样多的元素。copy前面加一句:vec.resize(lst.size())(书中P314);
(b)P318页中,reverse只是改变了vector预先分配的内存空间,并没有改变vector元素的个数,所以本题目中运行会报错,v.size()仍旧是0;使用resize函数改变;
习题10-8
这个是通过插入迭代器实现的,不是通过算法实现的;
习题10-9
抄一遍
#include<algorithm>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
void elimDups(vector<string> &words)
{
sort(words.begin(), words.end());
auto end_unique = unique(words.begin(), words.end());
words.erase(end_unique, words.end());
}
void main()
{
vector<string> vec = { "the","quick","red","fox","jumps","over","the","slow","red","turtle" };
elimDups(vec);
for (auto it = vec.begin(); it != vec.end(); ++it)
cout<< *it << " ";
}
习题10-10
标准算法库操作的是迭代器,不是容器