对于这个问题,请考虑一个在向量中添加值的函数的简单示例:
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版本。
答案 0 :(得分:3)
不幸的是,迭代器API中的任何内容都无法检索容器。事实上,T*
是std::vector<T>::iterator
的完全有效的实现。
另一方面,我不确定你想要在这个片段中防范什么。将vec.end()
传递给您的功能,即使容量足够,也无法工作,您需要std::back_inserter
。
答案 1 :(得分:1)
不,这是不可能的。
(作为提示,std::vector<double>::iterator
可能是double*
)。