C ++ Вводит числа в вектор через дальний цикл; случайные 0

Я использую дальний цикл для ввода случайных значений в вектор. Однако, когда я вывожу значения вектора, есть набор конечных нулей. Я не знаю, откуда они пришли.

#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

Я должен использовать дальний цикл. Я был смущен тем, что эти дополнительные нули делают там в массиве 3. Я установил размер вектора на десять, но использование .size () показывает, что на самом деле размер равен 20. Почему вектор поставил десять нулей перед моими случайными значениями?

0

Решение

Есть дополнительные нули, потому что вы положили их туда. Я не шучу, ты сделал это прямо здесь

vector<int> array3(10);

std::vector конструктор вы использовали тот, который принимает, сколько элементов вектор должен быть инициализирован. Таким образом, он выделяет пространство, а затем значение инициализирует их, что для целых чисел означает нулевую инициализацию.

С этой точки зрения, array3 не пустой вектор с пробелом еще на 10 целых чисел. Это вектор с 10 целыми числами (все 0) уже присутствует. Итак, когда вы push_back еще немного, все это добавлено после тех существующий Предметы.

Если вы хотите перезаписать их, как вы делаете с std::array, тогда вы можете использовать тот же цикл, который вы сделали для array2, Если с другой стороны, вы действительно хочу использовать push_back, то вам нужно построить пустой вектор (вы можете позвонить reserve на нем, после строительства), и push_back в это 10 раз. В этом случае, основанный на диапазоне for не будет работать, потому что вектор создан пустым. Таким образом, цикл будет за пустым диапазоном, и просто ничего не будет делать.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]