练习10.6 编写程序,使用fill_n将一个序列中的int值都设置为0。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> val{ 8,1,2,3,4,5 };
fill_n(val.begin(), val.size(), 0);
for (auto i : val) {
cout << i << " ";
}
cout << endl;
return 0;
}
练习10.7 下面程序是否有错误?如果有,请改正。
(a) vector<int> vec; list<int> lst; int i;
while (cin >> i)
lst.push_back(i);
copy(lst.cbegin(), lst.cend(), vec.begin());
传递给copy的目的序列至少要包含与输入序列一样多的元素,而本题的输入序列至少和目的序列一样多。
c.push_back() 中换成vec.push_back()。
(b) vector<int> vec;
vec.reserve(10);
fill_n(vec.begin(), 10 ,0);
vector中至少有不少于10个元素,若是要将容器的元素全置为0,那么用fill_n(vec.begin(), vec.size(), 0)才能保证。
练习10.8 本节提到过,标准库算法不会改变它们所操作的容器的大小。为什么使用back_inserter不会使这一断言失效?
用算法向容器中写入数据使用back_insert,但它是定义在头文件iterator中的一个函数!它是函数啊!真正起到添加元素作用的是容器操作或迭代器操作。