我正在实现一个简单的std::vector
。那里有两个insert
功能:
template <typename T, typename Allocator>
typename Vector<T, Allocator>::iterator
Vector<T, Allocator>::insert(const_iterator pos, size_type count, const T& value)
{
checkIterator(pos);
auto p = const_cast<iterator>(pos);
if (count == 0) {
return p;
}
for (size_type i = 0; i < count; ++i) {
p = insert(p, value);
}
return p;
}
template <typename T, typename Allocator>
template <typename InputIt>
typename Vector<T, Allocator>::iterator
Vector<T, Allocator>::insert(const_iterator pos, InputIt first, InputIt last)
{
checkIterator(pos);
auto p = const_cast<iterator>(pos);
if (first == last) {
return p;
}
for (auto iter = first; iter != last; ++iter) {
p = insert(p, *iter);
++p;
}
return p - (last-first);
}
但是当我想先使用时insert
函数时,编译器调用第二个函数:
Vector<int> vi = {1, 2, 3};
vi.insert(vi.begin(), 3, 4); // get compile error, using insert(const_iterator pos, InputIt first, InputIt last).
为什么编译器选择第二个函数,以及如何修改我的代码以使其正确?