typename std::vector<elementType>::iterator it;
此语句声明一个向量迭代器。正如你在这里看到的,它完全没有注资。它没有初始化为任何内容。
for(int i = 0; i <= mySize; i++){
it++;
}
这个迭代器的一些未指定的递增次数。这
it
未初始化,这是未定义的行为。
myVecrtor.insert(it, item);
尝试使用从未初始化过的迭代器将某些内容插入向量,但在未初始化之后,该迭代器会以未指定的次数递增,这样做不会有太大的效果。
Heap
的构造函数未显示,因此不清楚其构造函数是否以任何形式或方式初始化向量的内容。但这似乎不太可能,而且
mySize
似乎已初始化为1。因此
for
循环将至少迭代一次,很可能不是一次而是两次。
如果向量确实是空的,那么如果
信息技术
如果已正确初始化,则其唯一可能的有效值为
begin()
或
end()
(对于一个完全空的向量,两者都是等价的)。因此,增加迭代器,即使它已正确初始化,也将是未定义的行为。
总而言之,所示代码中存在多个概念性缺陷:
-
所有迭代器必须先初始化,然后才能以任何方式使用,递增或递减,取消引用,或以任何其他方式使用。
-
对于完全空的向量,唯一可能的有效迭代器不能递增或递减。
-
如果
insert
的目标是将一个新值附加到一个向量中,而不需要以任何形式或方式显示代码所做的任何事情。那是因为这恰好是
std::vector
他自己的
push_back()
做不需要迭代器,也不需要递增!