【C++】泛型算法里的fill()函数用法
2014-05-24 16:19
232 查看
fill()函数把指定范围内的容器元素设置为指定值。例子如下:
其中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。当然这只是个人猜测,还望大神指点。
#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++ 标准模板库 STL 算法之 for_each 函数的使用用法详解
- C++语法基础--泛型算法(generic algorithm)--写入容器元素的算法fill(),fill_n,replace()
- C++语法基础--泛型算法(generic algorithm)--插入迭代器back_inserter(),front_insertor(),inserter()以及next()函数简介
- C++ fill()和fill_n()函数用法
- C++泛型算法中常用函数
- c++ 标准模板库 STL 算法之 for_each 函数的使用用法详解
- C++变长参数函数的用法(转)
- (转)关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 使用泛型算法的例子, 使用了函数对象
- C++变长参数函数的用法(转)
- 使用STL中的泛型算法及函数对象
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++中函数指针的用法
- C/C++ assert() 函数用法
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++变长参数函数的用法(转)
- Effective STL: Item 44:优先使用与泛型算法同名的成员函数