gpt4 book ai didi

c++ - 异常处理迭代器接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:17 26 4
gpt4 key购买 nike

我正在尝试为我正在设计的库创建一个无懈可击的界面。用户要输入二维数据,所以我认为类似于 std::transform 的迭代器接口(interface)将是透明的。但是,我不确定如何异常处理迭代器的任何滥用。

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

template<typename InputItrX, typename InputItrY>
set_data(InputItrX beginX, InputItrX endX, InputItrY beginY)
{
//What exception handling should I do here?
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.
std::copy(beginX, endX, my_xVector.begin()); //copy X
std::copy(beginY, beginY+array_size, my_yVector.begin()); //copy Y
}

例如,如果用户混淆了界面并写入,我的程序将变为未定义

set_data(xdata.begin(), ydata.begin(), xdata.end());

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

是否可以在我的图书馆界面中检查此类错误?

最佳答案

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

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.

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

关于c++ - 异常处理迭代器接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com