C++ 异常处理迭代器接口

C++ 异常处理迭代器接口,c++,exception-handling,iterator,C++,Exception Handling,Iterator,我正在尝试为我正在设计的库制作一个防水接口。用户需要输入二维数据,因此我认为类似于std::transform的迭代器界面是透明的。 然而,我不确定如何处理迭代器的任何滥用 我的界面是这样的(如果有更好的界面,我可以更改): 或者他们的xdata有20个元素,但是他们的ydata没有 是否可以在我的库接口中检查此类错误?我不会向该方法添加任何检查,但记录异常规范取决于所使用的迭代器。因此,如果用户不关心性能损失或未经检查的迭代器,则可以使用检查的迭代器,从而获得最佳性能。我认为STL迭代器的大多

我正在尝试为我正在设计的库制作一个防水接口。用户需要输入二维数据,因此我认为类似于
std::transform
的迭代器界面是透明的。 然而,我不确定如何处理迭代器的任何滥用

我的界面是这样的(如果有更好的界面,我可以更改):

或者他们的
xdata
有20个元素,但是他们的
ydata
没有


是否可以在我的库接口中检查此类错误?

我不会向该方法添加任何检查,但记录异常规范取决于所使用的迭代器。因此,如果用户不关心性能损失或未经检查的迭代器,则可以使用检查的迭代器,从而获得最佳性能。我认为STL迭代器的大多数实现都有检查迭代器不兼容的断言。这些错误不需要在发布模式中检查,因为它们是程序员的错误

size_t array_size = endX-beginX;  //get the size of the xarray.
my_xVector.resize(array_size);    //resize my internal container
my_yVector.resize(array_size);    //  ..and for the ydata.

这使得您的方法与没有-运算符的迭代器不兼容!它只能与随机访问迭代器一起使用。您应该将其提取到resize_vectors模板中,该模板可以为随机访问迭代器实现,但不会为其他迭代器进行任何调整。在
std::copy
中,如果向量没有足够的容量,则在插入时必须使用插入器迭代器来调整向量的大小。

完整性:此处介绍了随机访问迭代器检查:
set_data(xdata.begin(), ydata.begin(), xdata.end());
size_t array_size = endX-beginX;  //get the size of the xarray.
my_xVector.resize(array_size);    //resize my internal container
my_yVector.resize(array_size);    //  ..and for the ydata.