您的位置:首页 > 编程语言 > C语言/C++

【C++】泛型算法里的fill()函数用法

2014-05-24 16:19 232 查看
fill()函数把指定范围内的容器元素设置为指定值。例子如下:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
vector<int> ivec(5);
fill(ivec.begin(), ivec.end(), 5); //将容器里的每个元素都赋成5
for (vector<int>::size_type isize = 0; isize != 5; isize++)
cout << ivec[isize] << ' ';
cout << endl;

return 0;
}


其中fill函数有三个参数:ivec.begin()和ivec.end()指定了要赋值的元素范围,5是要目标值,fill函数将将容器里的每个元素都赋成5。输出结果是:5 5 5 5 5

但根据容器的定义,ivec.end()指向的是最后一个元素的下一个位置,也就是说ivec.end()不指向一个已存在的元素,那这里用ivec.end()合适吗?改成ivec.end()-1不应该更合理吗?于是我改成ivec.end()-1后,发现输出结果是5 5 5 5 0,最后一个元素没有赋值。

个人觉得fill()函数的前两个参数指定的范围不是[  ivec.begin() , ivec.end()  ],而是[  ivec.begin() , ivec.end()  ),是一个前闭后开的区间。这样才能解释改成ivec.end()-1后,输出结果是5 5 5 5 0。当然这只是个人猜测,还望大神指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 泛型 c++ algorithm