我使用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.为什么向量在我的随机值前面放了十个零?
答案 0 :(得分:4)
因为你把它们放在那里所以有额外的零。我不是在开玩笑,你是在这里做的:
vector<int> array3(10);
您使用的std::vector
constructor是接受应该初始化向量的元素的那个。所以它分配空间,然后值初始化它们,对于整数意味着零初始化。
此时,array3
不是一个空的向量,其中包含10个整数的空格。它是一个已经存在10个整数(全0)的向量。因此,当您push_back
更多时,它们会在现有项目之后添加。
如果您想覆盖它们,就像使用std::array
一样,那么您可以使用与array2
完全相同的循环。另一方面,如果确实想要使用push_back
,那么您需要构建一个空向量(您可以在其上调用reserve
,施工后)和push_back
进入10次。在这种情况下,基于范围的工作不会起作用,因为向量是空的。所以循环将在一个空的范围内,所以只是不做任何事情。