我不明白为什么这段代码是准确的
vector<int> coll;
coll.reserve(2*coll.size());
copy (
  coll.begin(), coll.end(),    // zrodlo
  back_inserter(coll)          // przeznaczenie
);
coll.end()表示向量的结束。在我 push_back 任何东西之后(就像back_insert_iterator那样),coll.end()返回的结果与之前的相同还是不同的?是否有多个终止迭代器?为什么即使添加了新内容,end() 也可以用作容器的结尾?
此外,您不能将代码应用于列表容器 - 它会卡住。这很重要,因为在向量 push_back 的情况下,在重新分配数据(何时size()==capacity()和push_back()调用)后,迭代器会变得不可靠,而在列表的情况下,情况并非如此。比为什么代码挂起列表?
编辑:(sscce)
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
template <class T>
inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="")
{
    typename T::const_iterator pos;
    std::cout << optcstr;
    for (pos=coll.begin(); pos!=coll.end(); ++pos) {
        std::cout << *pos << ' ';
    }
    std::cout << std::endl;
}
int main(){
  list<int> coll;
  list<int>::iterator end = coll.end();
  copy (
    coll.begin(), coll.end(),    // zrodlo
    back_inserter(coll)          // przeznaczenie
    );
  cout << *end << endl;
  PRINT_ELEMENTS(coll);
}