c++ 有没有可能循环通过文件中的一些数字,并检查它们是否排序,而不需要将它们读入向量,然后检查向量

rfbsl7qr  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(99)

我想知道我是否可以直接对文件中的一些数字进行运算,而不需要
我写这段代码是为了检查一个文件是否被排序,但是我必须读它们
然后检查这个向量是否排序过
代码可能效率不高,因为我必须做一些额外的步骤。代码如下:
//方法检查数字是否已排序:

bool number_sorted(vector <int> vector){
    bool is_sorted = true;
     for(int i = 0; i < vector.size(); i++){
        for(int j = i + 1; j < vector.size(); j++){
            if(vector[i] > vector[j]){
                is_sorted = false;  
                cout << vector[i] << " and " << vector[j] << " are in the wrong order" << endl; 
            }
        }
    } 
    return is_sorted;
}

//方法对数字进行排序:

vector <int> sort(vector <int> vector){
    for(int i = 0; i < vector.size(); i++){
        for(int j = i + 1; j < vector.size(); j++){
            if(vector[i] > vector[j]){
                int temp = vector[i]; 
                vector[i] = vector[j]; 
                vector[j] = temp; 
            }
        }
    }

    return vector; 
}

//主方法:

int main(){
    vector <int> list; 
    fstream fs;
   fs.open("/Users/brah79/Downloads/skola/c++/inlämningsuppgiter/number1.txt"); 
    
    bool is_sorted = number_sorted(list); 
    if(is_sorted){
        cout << "the list of numbers is sorted" << endl; 
    }

    else{
        sort(list); 
    }

如您所见,所有操作都是先在向量上执行的,但我想进行检查,
直接整理文件希望我说的够清楚了

vsaztqbk

vsaztqbk1#

您必须读取文件,没有其他方法。但您不必将所有内容都保存在vector

bool areIntsInStreamSorted(std::istream& in)
{
    return std::is_sorted(std::istream_iterator<int>{in}, {}) && in.eof();
}

bool areIntsInFileSorted(std::filesystem::path p)
{
    std::ifstream in{p};
    return areIntsInStreamSorted(in);
}
s4n0splo

s4n0splo2#

让我们看看您的实现:

bool number_sorted(vector <int> vector){
    bool is_sorted = true;
     for(int i = 0; i < vector.size(); i++){
        for(int j = i + 1; j < vector.size(); j++){
            if(vector[i] > vector[j]){
                is_sorted = false;  
                cout << vector[i] << " and " << vector[j] << " are in the wrong order" << endl; 
            }
        }
    } 
    return is_sorted;
}

考虑每个元素vector[i],然后检查所有j > ivector[i]是否不大于vector[j]。如果大于,则不对向量排序。如果没有遇到这样的元素对vector[i]vector[j],则对向量排序。
如果这是检查一个数字序列是否排序的方法,那么是的,那么你需要内存中的所有数字。
在一个未排序的序列中,至少有一个索引i,其中

vector[i] > vector[i+1]

如果任何一对相邻的元素被排序,那么整个序列也被排序。
您只需要将一个数字与下一个数字进行比较。您不需要存储所有元素来检查它们是否排序。当您从文件中读取时,记住前一个数字,读取下一个数字,并检查下一个数字是否大于或等于前一个数字。

相关问题