我有这个问题,我的程序在我开始使用此功能后崩溃了。我不知道如何正确返回所需的类型。它是模板中的二进制搜索。我尝试将其更改为T *搜索,将array[middle]
转换为const并执行const T * out = &array[middle];
之类的操作,但每当我添加&时,它都会崩溃。如果我拿走它只返回数组[中],它会说:
cannot convert 'Fractions' to 'const Fractions*' in return
我应该如何正确归还? 我有像这样声明的数组,这个函数在同一个类中:它应该适用于任何类型,我们给它类Fractions来测试它,所以它的类型Fractions的正常数组,没什么特别的。
T * array;
和
const T *search(const T &inElement){
unsigned low = 0;
unsigned high = numberOfElements-1;
unsigned middle = 0;
while(low <= high){
middle = low + (high - low)/2;
if( inElement == array[middle]){
const T * out = &array[middle]; //problem here
return out;
}
else if(inElement < array[middle]){
high = middle -1;
}
else{
low = middle + 1;
}
}
return NULL;
}
指针和引用对我来说总是有问题的,我用向量阅读类似的主题并且仍然无法理解它。
我班上的其他人:
#include <iostream>
#include "Fractions.cpp"
using namespace std;
template<class T,unsigned n>
class SortedArray {
T * array;
unsigned length;
unsigned numberOfElements;
T element;
unsigned position;
public:
SortedArray() {
length = n;
array = new T[n];
numberOfElements = 0;
position = 0;
}
bool first(){
if(numberOfElements >= 1){
element = array[0];
position = 0;
return true;
}
return false;
}
bool next(){
if(position+1 < numberofElements){
position++;
element = array[position];
return true;
}
return false;
}
const T & aktual(){
return element;
}
SortedArray & operator << (const T &element){
if(numberOfElements == length || search(element) == NULL){return (*this);}
if(numberOfElements == length){return (*this);}
int i = numberOfElements;
for (; i > 0 && array[i-1] > element; i--)
{
array[i] = array[i-1];
}
array[i] = element;
numberOfElements++;
return (*this);
}
operator unsigned () const{
return numberOfElements;
}
const T *search(const T &inElement){
//this is the function causing problems
}
~SortedArray() {
delete [] array;
array = NULL;
}
};
int main()
{
SortedArray<Fractions,20> pz;
typedef Fractions Z;
pz << Z(1,3) << Z(3,5) << Z(7,4) << Z(3,4) << Z(2,3) << Z(7,2)
<< Z(5,4) << Z(1,4) << Z(6,7) << Z(4,3) << Z(2,3);
cout << "\nNumber of elements : " << pz.operator unsigned() << endl;
return 0;
}
答案 0 :(得分:2)
当numberOfElements
为0时,您的功能失败。您有以下行:
unsigned high = numberOfElements-1;
当numberOfElements
为0时,high
会收到-1
投放到unsigned int
的值,这是一个非常大的数字。这将导致超出其结束的数组访问,这是未定义的行为并且经常会崩溃。
至于你关于return
陈述的问题,你现在拥有的是正确的。