2010-10-16 117 views
0

alt text //計算一組整數爲什麼我的編程無法正確運行?

#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <conio.h> 

using std::cin; 
using std::cout; 
using std::endl; 
using std::vector; 
using std::sort; 

int main() 
{ 
// Ask for a set of integers 
cout << "Please input a set of integers: " 
    << endl; 

// Read the set of integers 
    // x is the variable to write 
int x; 
    // int_set is the set of integers to write 
vector<int> int_set; 
while (cin >> x) 
    { 
    int_set.push_back(x); 
    } 

// Check if the integer set is vacant 
typedef std::vector<int>::size_type vec_sz; 
vec_sz size = int_set.size(); 
if (size == 0) 
    cout << "There are no data. " 
    << "Please try again. "; 

// Sort 
sort (int_set.begin(), int_set.end()); 

// The set of integers multiply 1/4 
vector<double> int_set_quarter; 
cout << "The quarters of the set of integers are: "; 
for (int i = 0; i != size; ++i) 
    { 
    int_set_quarter[i] = 1/4 * int_set[i]; 
    cout << int_set_quarter[i]; 
    cout << endl; 
    } 

    getch(); 
return 0; 
} 

如果你運行,那麼它就會崩潰的宿舍......

+0

順便說一句 - 如果你不屑於進行初級的調試會話,你會發現自己的答案。 – 2010-10-16 11:21:37

回答

2

int_set_quarter的大小爲0,你的索引就可以了。 更改

vector<double> int_set_quarter; 

vector<double> int_set_quarter(size); 
+0

如何解決它? – Darson 2010-10-16 11:22:42

+0

@Eric:你是什麼意思:如何解決它?如果你像我說的那樣改變線條,一切都會好起來的。 – 2010-10-16 11:24:17

+0

是的,你是對的。 – Darson 2010-10-16 11:36:01

0

問題是這樣的:

vector<double> int_set_quarter; 
int_set_quarter[0] = 0.25; 

該代碼會崩潰,因爲int_set_quarter矢量不具有0個元素。你已經知道如何解決這個問題(你在int_set矢量中使用了相同的東西)。用push_back方法將元素添加到矢量的末尾。你也可以使用Armen的方法,通過構造函數初始化矢量的大小。

但在這個具體的例子,你不需要這個。你從來沒有真正使用int_set_quarter矢量,所以你可以這樣做:

// The set of integers multiply 1/4 
cout << "The quarters of the set of integers are: "; 
for (int i = 0; i != size; ++i) 
{ 
    double quarter = 1/4 * int_set[i]; 
    cout << quarter; 
    cout << endl; 
} 
+0

這真是一個好方法。 – Darson 2010-10-16 11:38:14

0

不能元素添加到矢量您想與int_set_quarter做的方式,所以你最終寫入的地方,尚未分配。這會導致訪問衝突,並且程序崩潰。

您可以通過提供所需元件的數量保留在載體中所需的空間時creating the vector,通過調用reserveresize,或通過使用push_back將元素添加到該載體的末端...

...或者,你以後不要在循環後做int_set_quarter什麼,你可以纔算你所需要的該次迭代輸出到一個局部變量,通過Dean SA所示。