调试断言失败 - 数组迭代器不兼容

时间:2014-01-10 19:48:50

标签: c++ arrays vector intersection set-intersection

我正在尝试获取数组和向量的交集。我决定让它们成为两个向量,因为它是cplusplus.com给出一个例子的方式。

这是我收到的错误消息:

enter image description here

这是我的代码:

enter image description here

getNumbers()函数返回一个数组。

修改

这是getNumbers()函数 - 它只返回相同返回类型的属性:

enter image description here

1 个答案:

答案 0 :(得分:3)

这个断言通常意味着作为范围的开头和结尾提供的迭代器引用不同的集合。

  

getNumbers()函数返回一个数组。

除非getNumbers()通过引用返回数组,并且还返回对同一数组的引用,否则此初始化无效:

std::vector<unsigned int> ticketNumbers(getNumbers().begin(), getNumbers().end());

为了使上述功能正常工作,getNumbers()必须重复返回对同一数组的引用。您的getNumbers返回一个副本,因为它按值返回一个数组。

要修复此行,请先调用getNumbers(),将结果存储在临时变量tempNumbers中,如下所示

std::array<unsigned int, TICKET_BALL_COUNT> tempNumbers= getNumbers();
std::vector<unsigned int> ticketNumbers(tempNumbers.begin(), tempNumbers.end());

或者,您可以更改getNumbers()函数以返回const引用,如下所示:

const std::array<unsigned int, TICKET_BALL_COUNT>& Ticket::getNumbers() const {
    return _numbers;
}