使用C ++进行矢量化,我的代码工作但不是我想要的方式?

时间:2016-05-28 22:17:05

标签: c++

所以我想制作一个基本的程序,我想制作一个名为数字的向量,并用1到100之间的10个随机数填充它。这是我到目前为止所拥有的;

{{1}}

它只输出一个数字,我希望输出10个随机数字。

6 个答案:

答案 0 :(得分:2)

删除以下行

system("pause");

will stop the continuation of your program。同时将return 0;移至main中的最后一个语句,否则只会在第一次迭代后停止。

此外,如果您只想生成10个数字,请将其设置为循环停止条件

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> numbers;
    const int in = 10;    // Generate 10 random numbers

    for (int i = 0; i < in; i++)
    {
        int n = rand() % 100 + 1;

        numbers.push_back(n);

        std::cout << "Number is: " << numbers[i] << std::endl;
    }

    return 0; // now you may return since the loop is complete
}

Working demo

答案 1 :(得分:1)

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // Declare and define a vector holding ints
    vector<int> numbers;

    // Run loop 10 times, increase i by one every time it's finished
    for (int i = 0; i < 10; i++)
    {
       // Generate a random number, get the last 3 digits, add one
       int n = rand() % 100 + 1;

       // Push that number back to the the vector
       // Like adding the number to a list
       numbers.push_back(n);

       // Print the current number from inside the vector
       // by using the counter/index i using an array-like syntax
       cout << "Number is: " << numbers[i] << std::endl;

    }
    // This executes the command pause, after it has been terminated,
    // stop the execution, with "success" by returning 0
    system("pause");
    return 0;
}

这很可能是您正在寻找的。

但请注意,在这种情况下使用向量会产生一些开销。 我只是打印n而不是将数字推到矢量上,然后再检索它。但是,由于这可能只是为了更高级的矢量使用后准备,这应该没问题。

输出:

Number is: 84
Number is: 87
Number is: 78                                                                                                                                                                                    
Number is: 16                                                                                                                                                                                    
Number is: 94                                                                                                                                                                                    
Number is: 36                                                                                                                                                                                    
Number is: 87                                                                                                                                                                                    
Number is: 93                                                                                                                                                                                    
Number is: 50                                                                                                                                                                                    
Number is: 22       

答案 2 :(得分:0)

在C和C ++中,随机使用种子来生成输出,实际上,如果你不为随机种子,随机将一次又一次地生成相同的数字。

您可以 - 并且应该使用时间戳

播种它
#include"time.h"
srand(time(0));

此后,随机将生成“真实”随机数。

另外,你必须删除这两行:

 system("pause");
  return 0;

它在第一次迭代中打破了你的循环

答案 3 :(得分:0)

循环内的

return 0将导致它在第一次迭代后终止。 return对C中的任何循环都没有意义,此语句用于终止函数。

如果代码正确缩进,您可能会立即看到它。缩进事项。

此外,你并没有告诉它循环10次,你告诉它循环in次,而inrand() % 100 + 1

答案 4 :(得分:0)

您应该将system ("pause")return放在循环之外,而不是放在

之内
... 
for () {...}

system ("pause");
return 0;

答案 5 :(得分:0)

以下想法对我有用......

//Initialize in ctor
std::vector<int> vecI;
for (int i=0; i<100; ++i)  vecI.push_back(i); 

time_t seed = std::chrono::system_clock::now().time_since_epoch().count();

std::shuffle(vecI.begin(), vecI.end(), std::default_random_engine(seed));

// in ctor, ok to display for debug, or disable for release
if(debugEnabled) {
   for (int i=0; i<100; ++i)
      std::cout << vecI[i] << " ";  // 
std::cout << "\n" << std::endl;  
}

在应用程序中,您可以随时访问随机值。

// easy to use in application
for (int i=0; i<10; ++i)
   testWith (vecI[i]);  // ten selections from values in range 0..99


// easy to test with all in-range values, in shuffled order
for (int i=0; i<100; ++i)
   testWith (vecI[i]);  // all values in shuffled order


// test with all in-range values, in order
for (int i=0; i<100; ++i)
   testWith (i);  // all values in order