**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question
这个问题发生在我使用insertion_sort算法时。我尝试实现C++20的std::span版本,但它抛出**“std::span index out of range”,因此我将其转换为“C-array”**,相同的代码工作正常。我不知道问题出在哪里。P.S我的平台是windows10,我使用的是VisualStudio 2022
这是std::span版本。
template <typename Ty>
void insertion_sort(std::span<Ty> arr) {
long long size = arr.size();
// From the 2nd element to the nth element
for (long long i = 1; i < size; ++i) {
Ty key = arr[i];
long long j = i - 1;
// Until the first element.
for (; arr[j] > key && j >= 0; --j)
arr[j + 1] = arr[j];
// Place key into the right position.
arr[j + 1] = key;
}
}
但是,如果我将std::span改为**C-array,就像下面这样,它可以正常工作。
template <typename Ty>
void insertion_sort(Ty* arr, std::size_t size) {
// From the 2nd element to the nth element
for (long long i = 1; i < size; ++i) {
Ty key = arr[i];
long long j = i - 1;
// Until the first element.
for (; arr[j] > key && j >= 0; --j)
arr[j + 1] = arr[j];
// Place key into the right position.
arr[j + 1] = key;
}
}
如果有人能帮我解决这个问题,我会很高兴!
1条答案
按热度按时间nzk0hqpo1#
for循环中的条件
错误。您需要交换逻辑AND运算符的操作数
否则,表达式
arr[j]
的索引可以等于-1
。