1. 程式人生 > 實用技巧 >一個常用的檔案操作類

一個常用的檔案操作類

此作業的要求參見:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11207

作業0(5分)

修改create.cpp檔案,改成由命令列引數確定生成的資料的資料量。修改readme.md的對應部分。(要求貼出修改之後的程式碼和read.md。)

修改後的程式碼:

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main(int argc, char* argv[])
{
 int num = atoi(argv[1
]); srand((unsigned)time(NULL)); for (int i = 0; i < num; i++) { cout << rand() << "\n"; } cout << endl; return 0; }

readme.md

readme.md

安裝vs vs下載官網[https://visualstudio.microsoft.com/zh-hans/]

配置環境變數;

編譯create.cpp檔案;

執行“create 10>whitelist”生成檔案whitelist;

執行“create 1000 >q ”生成檔案q,;

編譯brute.cpp檔案;

執行“brute -w whitelist < q > output”

作業1(10分)

對上面兩段老楊寫的程式碼任選其一進行profile,觀察現象(要求有截圖記錄)。

改正後的程式碼:

bool is_match(int t, int w[], int w_length)
{

    for (int i = 0; i < w_length; i++)
    {
        if (t== w[i])
        {
            return
false; } } return true; }

作業2(10分)

以biggerwhitelist和biggerq作為輸入,對作業1中選擇的程式碼再次進行profile,找到程式碼執行最“慢”的地方,截圖為證並文字說明。

發現最主要的就是查詢函式花費了接近百分之九十的時間,19116ms.

作業3(10分)

根據作業2找到的最慢的地方,優化作業1中你選擇的程式碼,在保證輸出結果正確的前提下,減少老楊程式執行的時間。(優化後的程式碼需要你提交到git上,作為教師的判斷依據。優化後的程式的名字應該是better.cpp或者better.cs。)

git地址: [https://github.com/talm966/white_list.git]

使用二分查詢優化演算法:

    int left = 0, right = w_length-1, mid;
    //二分法查詢
    while (left < right)
    {
        mid = (left + right) / 2;
        if (t < w[mid])
        {
            right = mid - 1;
        }
        else if (t > w[mid])
        {
            left = mid + 1;
        }
        else         
            return false;      
    }
    return true;

作業4(5分)

對作業3優化後的程式碼進行profile,結果與作業2的結果做對比。畫表格並文字說明。

版本 main is_match
brute 21394ms 19116ms
better 8762ms 54ms

做業5(5分)

你覺得老楊的文件(readme),註釋和程式碼風格又哪些問題,該如何改進?

1.在brute.cpp中的is_match函式邏輯出錯,已在前文中修改指出。

2.readme.md中的執行語句出錯,這是很嚴重的問題。

  應該是brute-wwhitelist < q > output”