在写vector的代码时遇到了这样一个错误
以下是代码书写内容以及我的测试代码
测试代码的目的就是想测试一下我写的vector构造方法
vector(size_t n, const T& val = T());
可是却发生了上述的报错
vector(size_t n, const T& val = T())
{
// 法一:
start = new T[n];
for (int i = 0; i < n; ++i)
start[i] = val;
finish = start + n;
endofstorage = finish;
}
template <class InputIterator>
vector(InputIterator first, InputIterator last)
: start(nullptr)
, finish(nullptr)
, endofstorage(nullptr)
{
// 先计数求出这段区间多少个元素
auto it = first;
int count = 0;
while (it != last)
{
count++;
it++;
}
// 开辟count个<T>类型空间元素的start,并用参数区间给start赋值
start = new T[count];
finish = start;
while (first != last)
{
(*finish) = (*first);
++finish;
++first;
}
endofstorage = finish;
}
问题:
目的是为了通过构造函数创建10个值为1的数组,可是报错位置却出现在了我的
vector (InputIterator first, InputIterator last)
vector区间构造函数体上。
分析:
实参传入的(10,1)传入的是俩个int类型的值,然而我的vector构造函数的形参是
(size_t ,int)类型推演不匹配,所以编译器不会进行调用此构造函数
然而区间构造函数使用的迭代器模板,推演出来俩个int类型的参数
那么后续操作对迭代器int类型解引用就会报错了
解决:将构造函数类型更改为int类型