//计算一组整数的四分之一
#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 :(得分: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之后提供所需元素的数量,通过调用reserve或resize,或使用push_back来保留向量中的必要空间将元素添加到向量的末尾...
...或者,因为在循环之后你没有对int_set_quarter
做任何事情,你可以只计算你需要输出的那个迭代到局部变量,由Dean显示