C ++输入通过ranged for循环插入向量;随机0

时间:2018-01-28 09:03:41

标签: c++ vector ranged-loops

我使用ranged 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

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

1 个答案:

答案 0 :(得分:4)

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

vector<int> array3(10);

您使用的std::vector constructor是接受应该初始化向量的元素的那个。所以它分配空间,然后值初始化它们,对于整数意味着零初始化。

此时,array3不是一个空的向量,其中包含10个整数的空格。它是一个已经存在10个整数(全0)的向量。因此,当您push_back更多时,它们会在现有项目之后添加。

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