2011-04-18 16 views
1

這應該很簡單,我發現第一個參數是數組名稱,第二個參數是數組的大小+數組名,但似乎沒有在所有排序,實際上它沒有做任何事情,也沒有在控制檯上寫任何東西,我在做別的什麼傻?std :: sort()C++沒有工作,但它很簡單,爲什麼:(1D數組

int main() 
{ 
    readFromFile(); 
    system("pause"); 
    return 0; 
} 

void readFromFile() 
{ 
    string line; 
    int i = 0; 
    int j; 
    ifstream file("ACW2_data.txt"); 

if(file.is_open()) 
{ 
    getline(file, line); 

    while (!file.eof()) 
    { 
     file >> numbers[i]; 
     i++; 
     int elements = sizeof(numbers)/sizeof(numbers[0]); 
     **sort(numbers, numbers + elements);** 
    } 
    file.close(); 
} 
else 
{ 
    cout << "Cant open the file" << endl; 
} 

for(j = 0; j < i; j++) 
{ 
    cout << numbers[j] << endl; 
} 

system("pause"); 
} 

你們覺得呢?

+5

'numbers'的類型是什麼? – 2011-04-18 19:41:53

+0

你的文件是什麼樣的? – 2011-04-18 19:43:09

+1

'數字'是一個指針嗎?它如何分配?爲什麼在每個數字讀取後進行排序,而不是先讀取所有數字,然後再進行排序? – hammar 2011-04-18 19:43:28

回答

2
while (!file.eof()) 
{ 
    file >> numbers[i]; 
    i++; 
    int elements = sizeof(numbers)/sizeof(numbers[0]); 
    **sort(numbers, numbers + elements);** 
} 
file.close(); 

while (file >> numbers[i]) 
{ 
    ++i; 
} 
sort(numbers, numbers + i); 
file.close(); 

std::vector<your_int_type> numbers; 
your_int_type tmp; 
while (file >> tmp) 
{ 
    numbers.push_back(tmp); 
} 
std::sort(numbers.begin(), numbers.end()); 
file.close(); 
+0

看起來是正確的,你應該添加到陣列的開始元素的數量,而不是它的大小以字節爲單位 – jeffythedragonslayer 2011-04-18 19:44:44

+0

omg謝謝,即時通訊如此愚蠢的最近,我是一個初學者。我把元素放在一個工作中,忘記把它改回「我」哈哈,再次感謝你! – 2011-04-18 19:46:27

+2

請修正while(!file.eof())' – Erik 2011-04-18 19:51:32

0

首先,對numbers定義,什麼是它的類型?

其次,numbers中的元素數量是i,因此您不需要計算它。

第三,爲什麼每次插入新元素時都要排序numbers?爲什麼不插入所有元素,然後排序一次。在while循環之後。

0

我瘋狂的猜測,因爲你沒有顯示如何聲明numbers的重要細節是它是一個指針,並且sizeof技巧是無法計算分配的大小。這是更好地使用sizeof基於模板,如:

template <typename T, int N> 
int array_size(T (&)[N]) { 
    return N; 
} 

或:

template <typename T, int N> 
char (&array_size_impl(T(&)[N]))[N]; 
#define ARRAY_SIZE(x) sizeof(array_size_impl(x)) 

由於這些將觸發如果使用指針編譯時錯誤,而不是默默地失敗,產生意想不到的結果作爲sizeof(x)/sizeof(x[0])詭計。

2

編輯:目前,我假設numbers是一個int數組。如果沒有,那麼,我希望你能弄清楚該怎麼辦...

int main() { 
    std::ifstream file("ACW2_data.txt"); 

    std::vector<int> numbers; 

    file.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

    std::copy(std::istream_iterator<int>(file), 
       std::istream_iterator<int>(), 
       std::back_inserter(numbers)); 

    std::sort(numbers.begin(), numbers.end()); 

    std::copy(numbers.begin(), numbers.end(), 
       std::ostream_iterator<int>(std::cout, "\n")); 
    return 0; 
} 
+0

+1用於刪除while循環。 – 2011-04-18 20:06:00

+0

不應該是'file.ignore(std :: numeric_limits :: max(),'\ n');'? – Cubbi 2011-04-18 20:07:08

+0

@Cubbi:是的 - 我很懶,但我修好了。 – 2011-04-18 20:09:34

相關問題