0

我正在使用范围 for 循环将随机值输入到向量中。但是,当我输出向量的值时,会有一组尾随零。我不知道他们是从哪里来的。

#include <iostream>
#include <vector>
#include <array>
#include <cstdlib>
#include <iomanip>

using namespace std;

int  double1(int number)
void double2 (int &number);
void double3 (int *number);

void triple1 (int array1[], int size);
void triple2 (array<int, 10> &array2);
void triple3 (vector<int>    *array3);

int main(){
    int array1[10];
    int copy_array1[10];
    array<int, 10> array2;
    array<int, 10> copy_array2;
    vector<int> array3(10);
    vector<int> copy_array3(10);
    for(int x = 0; x <10; x++){
        array1[x] = rand() % (101 -50) + 50;
    }
    for(auto &n : array2){
        n = rand() % (101 -50) + 50;
    }
    for(auto a : array3){
        array3.push_back(rand() % (101 -50) + 50);
    }
    copy(begin(array1), end(array1), begin(copy_array1));
    copy_array3 = array3;
    copy_array2 = array2;
    cout <<"Arrays loaded with random numbers from 50 - 100" << endl;
    cout << "=====================================================" << endl;
    cout <<"Array1: ";
    for(int x = 0; x<10; x++){
        cout << setw(5) << left << array1[x];
    }
    cout << endl;
    cout <<"Array2: ";
    for(int x:array2){
        cout << setw(5) << left << x;
    }
    cout << endl;
    cout <<"Array3: ";
    for(int x:array3){
       // if( x != 0)
            cout << setw(5) << left << x;
    }
    cout << endl;
    double1(array1);

}

输出给了我:

Arrays loaded with random numbers from 50 - 100
=====================================================
Array1: 91   55   60   81   94   66   53   83   84   85
Array2: 94   94   75   98   66   82   87   58   83   80
Array3: 0    0    0    0    0    0    0    0    0    0    56   68   76   50   87   90   80   100  82   55

我必须使用范围 for 循环。我一直对那些额外的零在 array3 中做了什么感到困惑。我将向量的大小设置为十,但使用 .size() 显示大小实际上是 20。为什么向量在我的随机值前面放了十个零?

4

1 回答 1

4

有额外的零,因为你把它们放在那里。我不是在开玩笑,你在这里做到了:

vector<int> array3(10);

您使用的std::vector构造函数是接受初始化向量的元素数量的构造函数。所以它分配空间,然后 value 初始化它们,这对于整数意味着零初始化。

在这一点上,array3不是一个空向量,还有 10 个整数的空间。它是一个已经存在 10 个整数(全为 0)的向量。因此,当您push_back再添加一些时,它们都将添加到那些现有项目之后。

如果你想覆盖它们,就像你对 做的那样std::array,那么你可以使用与你做的完全相同的循环array2。另一方面,如果你真的想使用push_back,那么你需要构造一个向量(你可以reserve在构造之后调用它),并push_back进入它 10 次。在这种情况下,基于范围的 for 将不起作用,因为向量是空的。所以循环将在一个空范围内,所以不会做任何事情。

于 2018-01-28T09:11:05.163 回答