为什么我的编程无法正常运行?

时间:2010-10-16 11:15:34

标签: c++

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;
}

如果你跑,那么它会崩溃......

3 个答案:

答案 0 :(得分:2)

int_set_quarter的大小为0,并为其编制索引。 变化

vector<double> int_set_quarter;

vector<double> int_set_quarter(size);

答案 1 :(得分: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;
}

答案 2 :(得分:0)

您无法按照int_set_quarter尝试的方式向向量添加元素,因此您最终会写入尚未分配的位置。这会导致访问冲突,并且程序崩溃。

您可以通过在creating the vector之后提供所需元素的数量,通过调用reserveresize,或使用push_back来保留向量中的必要空间将元素添加到向量的末尾...

...或者,因为在循环之后你没有对int_set_quarter做任何事情,你可以只计算你需要输出的那个迭代到局部变量,由Dean显示