C++ 向量实现中的Bug

C++ 向量实现中的Bug,c++,vector,C++,Vector,我正在实现一个向量(使用分配器类) explicit vector():容量(0),大小(0)//第一个构造函数 { 缓冲=自由=结束; } 显式向量(size_t sz,const t&initial=t())//第二个构造函数 { 容量=sz; 尺寸=sz; 缓冲区=分配分配(sz); 对于(大小i=0;i

我正在实现一个向量(使用分配器类)

explicit vector():容量(0),大小(0)//第一个构造函数
{
缓冲=自由=结束;
}
显式向量(size_t sz,const t&initial=t())//第二个构造函数
{
容量=sz;
尺寸=sz;
缓冲区=分配分配(sz);
对于(大小i=0;i
下面是我定义的构造函数。当我使用第三个构造函数时,会收到错误消息:

test.cpp:11:41: error: invalid conversion from ‘vector<int>::iterator {aka int*}’ to ‘long unsigned int’ [-fpermissive]
test.cpp:11:41:错误:从'vector::iterator{aka int*}'到'long unsigned int'[-fppermissive]的转换无效

我得出的结论是编译器混淆了第二个构造函数和第三个构造函数,因为它们都有两个参数。我能做什么

标准向量通过在其内部有一个特殊的
迭代器
类来解决它,并将其用作参数。这意味着,虽然有相同数量的参数,但参数的类型将不同。

std::ptrdiff_t sz(lst-beg)
-->将不起作用,除非
Iterator
是指针类型(我知道,它可以工作,但这不是重点),在这种情况下,为什么要将构造函数模板化?出于兴趣,为什么要实现向量?这大概是一个纯粹的学术练习吧?“当我使用第三个构造器时”——在哪里?显示代码。我只是想弄清楚真正的stl向量是如何工作的。我搜索了一些主题,发现构造函数中使用的
迭代器是一种模板类型:
模板向量(inputierator beg,inputierator end)
test.cpp:11:41: error: invalid conversion from ‘vector<int>::iterator {aka int*}’ to ‘long unsigned int’ [-fpermissive]