Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序中模板类型的输入打印错误_C++_Templates - Fatal编程技术网

C++ 程序中模板类型的输入打印错误

C++ 程序中模板类型的输入打印错误,c++,templates,C++,Templates,下面是我的程序的代码片段和模板。它没有错误,但当我打印时,它会生成错误的结果。请告诉我哪里错了,我如何解决这个问题。下面是C++代码,它具有三个功能,主要功能是模板T.< #include<iostream> using namespace std; template<typename T> void input(T* &start, int size){ start = new T[size]; T* beyond = &start[s

下面是我的程序的代码片段和模板。它没有错误,但当我打印时,它会生成错误的结果。请告诉我哪里错了,我如何解决这个问题。下面是C++代码,它具有三个功能,主要功能是模板T.<
#include<iostream>
using namespace std;

template<typename T>
void input(T* &start, int size){
    start = new T[size];
    T* beyond = &start[size];

    while(start != beyond){
        cout<<"\nEnter: ";
        cin>>*start;
        start++;
    }
}


template<typename T>
void sort(T* start, int size){
    T hold;

    for(int j=0; j<size-1; j++){
        for(int i=0; i<size-1; i++){
            if(start[i]>start[i+1]){
                    hold=start[i];
                    start[i]=start[i+1];
                    start[i+1]=hold;
            }
        }
    }
}


template<typename T>
void display(T* start, int size){
    T* beyond = &start[size];
    cout<<"\nAfter Sorting: "<<endl;

    while(start != beyond){
        cout<<*start<<"\t";
        start++;
    }
}

int main(){
    int* x=NULL;
    float* y=NULL;
    char* z=NULL;
    int size;

    cout<<"Enter the number of elements: ";
    cin>>size;

    cout<<"\nEnter integer values:";
    input<int>(x, size);
    sort<int>(x, size);
    display<int>(x, size);

/** 
    cout<<"\nEnter floating values:";
    input<float, int>(y, size);
    sort<float, int>(y, size);
    display<float, int>(y, size);

    cout<<"\nEnter character values:";
    input<char, int>(z, size);
    sort<char, int>(z, size);
    display<char, int>(z, size);
    */
    system("pause");
}
#包括
使用名称空间std;
模板
无效输入(T*&开始,整数大小){
开始=新的T[尺寸];
T*beyond=&start[size];
while(开始!=超越){
无法启动;
启动++;
}
}
模板
无效排序(T*开始,整数大小){
T持有;
对于(int j=0;j您可以这样做:

template<typename T>
void input(T* &start, int size){
    start = new T[size];
    //T* beyond = &start[size-1];

    //while(start <= beyond){
    for(int i=0;i<size;i++){
        cout<<"\nEnter: ";
        cin>>start[i];
        //start++;
    }
    //}
}
模板
无效输入(T*&开始,整数大小){
开始=新的T[尺寸];
//T*beyond=&start[size-1];

//当(start在
输入
函数中分配内存并将其置于
开始
时。然后将该指针移到末尾,该结束值将返回给调用函数。然后尝试将其用作其他方法的开始,这将导致未定义的行为

template<typename T>
void input(T* &start, int size){
    start = new T[size]; // points to the start
    T* beyond = &start[size];

    while(start != beyond){
        cout<<"\nEnter: ";
        cin>>*start;
        start++; // Moving all the time...
    }
    // In the end start points to beyond and main gets that as a result
}
模板
无效输入(T*&开始,整数大小){
开始=新的T[size];//指向开始
T*beyond=&start[size];
while(开始!=超越){
无法启动;
开始+++;//一直在移动。。。
}
//最终,起点指向beyond,结果main得到了这一点
}
如果你真的想玩指针,你可以很容易地修复它:

template<typename T>
void input(T* &start, int size){
    start = new T[size];
    T* beyond = &start[size];
    T* curr = start;

    while(curr != beyond){
        cout<<"\nEnter: ";
        cin>>*curr;
        curr++;
    }
}
模板
无效输入(T*&开始,整数大小){
开始=新的T[尺寸];
T*beyond=&start[size];
T*curr=开始;
while(curr!=超出){
cout*curr;
curr++;
}
}
这样,
start
指针将始终指向开始,并正确返回到调用函数


在调试器中一步一步地运行将很容易显示此问题。此外,请始终描述此问题,如果您不解释正确的结果是什么,或者使用某些输入得到的结果是什么,我们不知道“生成错误的结果”是什么意思。

这不起作用。“大小-1”在进行输入时,再消除1个要输入的值。我已编译。不,这不是问题。Beyond作为数组后的一个步骤正确计算。使用for循环开始[I]是一种旧方式。我想递增指针地址。@SaveraChughtai没有“旧方式”关于它。正如你所看到的,摆弄指针只会让你头疼。尽管如此,对于循环,我的程序的实际问题是什么?为什么它会给出惊人的结果?plz“生成错误的结果”什么是错误的结果?什么是正确的结果?对不起,先生,我不明白您所说的。请您给我一个代码示例。谢谢
template<typename T>
void input(T* &start, int size){
    start = new T[size];
    T* beyond = &start[size];
    T* curr = start;

    while(curr != beyond){
        cout<<"\nEnter: ";
        cin>>*curr;
        curr++;
    }
}