是否可以从迭代器访问容器?

时间:2016-06-01 09:06:22

标签: c++ stl containers c++98

对于这个问题,请考虑一个在向量中添加值的函数的简单示例:

void insert( std::set<double>::const_iterator from_begin,
             std::set<double>::const_iterator from_end,
             std::vector<double>::iterator to )
{
  std::copy(from_begin, from_end, to);
}

现在想象一下,我想添加一个关于我的向量容量的检查,是否可以获得to工作的容器?是否可以做类似的事情?

void insert( std::set<double>::const_iterator from_begin,
             std::set<double>::const_iterator from_end,
             std::vector<double>::iterator to )
{
  std::vector<double>& container = give_me_the_container(to);
  assert(container.size() + std::distance(from_end,from_begin) < container.capacity());
  std::copy(from_begin, from_end, to);
}

注意:我使用的是gcc 4.8.3。 我不使用c ++ 11 来兼容旧的gcc版本。

2 个答案:

答案 0 :(得分:3)

不幸的是,迭代器API中的任何内容都无法检索容器。事实上,T*std::vector<T>::iterator的完全有效的实现。

另一方面,我不确定你想要在这个片段中防范什么。将vec.end()传递给您的功能,即使容量足够,也无法工作,您需要std::back_inserter

答案 1 :(得分:1)

不,这是不可能的。

(作为提示,std::vector<double>::iterator可能是double*)。