时间:2014.04.20
地点:基地二楼
----------------------------------------------------------------------------
#include<iostream> #include<iterator> #include<vector> #include<algorithm> using namespace std; int main() { vector<int> my_vec; copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(my_vec)); }
这段代码用于从cin流中读取int类型数据,并使用copy算法将数据填空到一个vector容器中,目标迭代器是一个与my_vec绑定的插入迭代器。这里并没有什么问题:
auto first = find(my_vec.begin(), my_vec.end(), 2); auto last = find(my_vec.begin(), my_vec.end(), 10); *first = 3;
copy(first, last, ostream_iterator<int>(cout, "\n"));代码本身是想使用迭代器对构成范围[first,last),但有可能first还在last之后,那么这样的范围也是不允许的。也就是说first必须位于fast所指向的对象之前才可以构成一个有效范围。
my_vec.insert(--my_vec.end(),2);在标准库的实现中,对迭代器的实现是使用类型的指针来表示vector<T>::iterator的,C++中并不允许对内置类型的临时变量进行修改,比如:
Type* function(); //定义了一个返回Type* 的函数 p=--function(); //function返回Type* 是一个临时变量,这里先对临时变量进行了修改然后赋给p是非法的合理的方式是:
my_vec.insert(my_vec.end()-1,2);
my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); my_vec.push_back(1); copy(first, last, ostream_iterator<int>(cout, "\n"));
原文:http://blog.csdn.net/u012333003/article/details/24182961