【发布时间】:2023-03-04 03:53:01
【问题描述】:
我正在使用模板和 STL 进行实验。这是我的测试代码...
template <typename Item>
struct TList
{
typedef std::vector <Item> Type;
};
template <typename Item>
class Cont
{
private:
typename TList <Item>::Type elements;
public:
void push_back ( const Item & p ) {elements.push_back ( p );}
typename TList <Item>::Type ::iterator
copy (typename TList <Item>::Type ::iterator first,
typename TList <Item>::Type ::iterator last,
typename TList <Item>::Type ::iterator result)
{
elements.resize(elements.size() + last - first); //Exception
return copy ( first, last, result );
}
typename TList <Item>::Type ::iterator begin() { return elements.begin(); }
};
但是在复制操作期间
int main()
{
Cont <double> cont;
cont.push_back(1);
cont.push_back(2);
TList <double>::Type v;
v.push_back(3);
v.push_back(4);
cont.copy(v.begin(), v.end(), cont.begin()); //Exception
cont.copy(v.begin(), v.end(), cont.end()); //Exception
return 0;
}
程序导致运行时异常。你能帮我找出错误吗?
Exception: Vector iterator + offset out of range...
【问题讨论】:
-
-1:您是否尝试过在调试器中单步执行您的代码?或者添加跟踪语句来确定关键变量的值?
-
这是非常危险的代码。它有什么用?
-
@Space: 只在我学习c++的时候考...
-
@GMan:我几乎总是对遵循“这是我的代码。它不起作用。为什么不?”模式的问题投反对票。没有明显的调试尝试。
-
@Oli,我在发送之前调试了代码,但是我想不出带括号的技巧......