如何将一系列计算值发送到数组中?

时间:2016-02-07 02:39:56

标签: c++ arrays

在我的程序中,我想要让用户输入一系列x值,最小和最大x。我想在这两个极端中计算出20个数字。然后,我想在表格中显示信息,然后找到有关这些数字的一些统计信息。我不知道如何将计算值发送到数组中,以便我可以计算统计数据,如均值和范围。我对数组没有太多经验,所以任何建议都会有所帮助。这是我到目前为止所拥有的

Select t1.col2, 
case when t2.type = 'a' then count(t1.col3) end as a,
case when t2.ab = 'b' then count(t1.col3) end as b 
From mytable t1 join mytable2 t2 on t1.col1=t2.id where t1.col3 is not null 
group by 1;

3 个答案:

答案 0 :(得分:1)

基本上,您希望使用std::vector来处理此类动态任务。每次要向数组添加元素时,请在向量上使用push_back()函数。

  

在向量的末尾添加一个新元素,在其当前的最后一个元素之后。 val的内容被复制(或移动)到新元素。   这有效地将容器大小增加了一个,这将导致分配的存储空间的自动重新分配,如果 - 并且仅在新的矢量大小超过当前矢量容量时。

#include <vector>

//Rest of code here

for (int i = 0; i < POINTS; ++i) {
    vectorName.push_back(VARIABLE); //To add an element at the end
    ASSIGNMENT_VARIABLE[i] = vectorName.at(i); //To assign a variable to the value of each value in the variable
}

Reference

答案 1 :(得分:1)

我重新编写代码以添加一些向量&lt;&gt;实例,我希望你理解它

#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>

using namespace std;

int main()
{
   double xmin, xmax;
   const int POINTS = 20;
   const double PI = 3.1416;
   double increments;
   int counter = 0;
   double array[POINTS];

   vector<vector<float> > values;

   cout << "Enter in a value for the minimum x value: ";
   cin >> xmin;
   cout << "Enter in a value for the maximum x value: ";
   cin >> xmax;

   increments = (abs(xmin) + xmax) / POINTS;

   double x = xmin + increments * counter;
   double min = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x);
   double max = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x);

   cout << setw(15) << "x |" << setw(15) << "f(x)" << endl;
   cout << setw(32) << setfill('-') << " " << endl;
   cout << setfill(' ');
   vector<float> auxiliar;

   while (x <= xmax)
   {
      auxiliar.resize(2);
      auxiliar[0] = x;
      auxiliar[1] = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x);

      values.push_back(auxiliar);
      auxiliar.clear();

      if (0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x) > max)
         max = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x);
      if (0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x) < min)
         min = 0.0572 * cos(4.667 * x) + 0.0218 * PI * cos(12.22 * x);
      counter++;
      x = xmin + increments * counter;

   }

   for(vector<float> i:values)
     cout << fixed << showpos << setw(15) << setprecision(2) << i[0] <<     setw(15) << setprecision(4) << i[1] << endl;
 }

我使用辅助技术将2元素向量添加到向量&gt;使用来自vector&lt;&gt;的push_back()方法的对象模板。我希望它对你有所帮助! :d

输出与原始输出相同(xmin = 2,xmax = 3)

Enter in a value for the minimum x value: 2
Enter in a value for the maximum x value: 3
            x |           f(x)
------------------------------- 
          +2.00        -0.0043
          +2.25        -0.0759
          +2.50        +0.0800
          +2.75        +0.0155
          +3.00        +0.0425

答案 2 :(得分:0)

如上所述,载体可能是一个不错的选择。首先,请确保:

#include <vector>

矢量就像一个数组一样工作,除了它不会让你访问越界,你不必告诉它制作矢量多长时间,它会根据需要扩展。首先,使用要放入其中的内容类型实例化向量:

std::vector<double> doubleVector;

上面名为doubleVector的向量将保存双精度数,并且以(doubleVector.size()== 0)开头为空。现在,假设我想将数字1.0到20.0以0.2的增量放入向量中。我们使用它的push_back()成员函数插入到向量中:

for (double i = 1.0; i < 20.0; i+=0.2) {
        doubleVector.push_back(i);
} //doubleVector now contains 1.0, 1.2, 1.4, 1.6, and so on

现在,要访问函数中的内容,可以使用以下两种方法之一。您可以使用数组语法:

double myDouble = doubleVector[0] //myDouble now equals 1.0

或者,您可以使用.at()成员函数:

double myDouble = doubleVector.at(0); //myDouble still equals 1.0

要迭代向量以显示内容,有两种主要方法。第一个(类似于数组):

for (int i = 0; i < doubleVector.size(); i++) {
    std::cout << doubleVector.at(i) << std::endl;
}

或者更优选的方式,使用标准模板库(STL)迭代器:

for (std::vector<double>::const_iterator iter = doubleVector.begin(); iter != doubleVector.end(); iter++) {
    std::cout << *iter << std::endl;
}

如果要修改向量的内容,可以使用迭代器而不是const_iterator:

for (std::vector<double>::iterator iter = doubleVector.begin(); iter != doubleVector.end(); iter++) {
    (*iter) = (*iter) * (*iter);
} //Each element in the vector is now squared

很抱歉这不是你问题的一个非常具体的答案,但是矢量是比使用C风格数组更受欢迎的版本,因为它们容易搞乱并导致段错误。矢量也很快访问。现在,如果您可以准确地提到要在向量中存储哪个计算,我可以提供一些帮助。有关常规向量的更多信息,请参阅http://www.cplusplus.com/reference/vector/vector/