Я использую дальний цикл для ввода случайных значений в вектор. Однако, когда я вывожу значения вектора, есть набор конечных нулей. Я не знаю, откуда они пришли.
#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. Почему вектор поставил десять нулей перед моими случайными значениями?
Есть дополнительные нули, потому что вы положили их туда. Я не шучу, ты сделал это прямо здесь
vector<int> array3(10);
std::vector
конструктор вы использовали тот, который принимает, сколько элементов вектор должен быть инициализирован. Таким образом, он выделяет пространство, а затем значение инициализирует их, что для целых чисел означает нулевую инициализацию.
С этой точки зрения, array3
не пустой вектор с пробелом еще на 10 целых чисел. Это вектор с 10 целыми числами (все 0) уже присутствует. Итак, когда вы push_back
еще немного, все это добавлено после тех существующий Предметы.
Если вы хотите перезаписать их, как вы делаете с std::array
, тогда вы можете использовать тот же цикл, который вы сделали для array2
, Если с другой стороны, вы действительно хочу использовать push_back
, то вам нужно построить пустой вектор (вы можете позвонить reserve
на нем, после строительства), и push_back
в это 10 раз. В этом случае, основанный на диапазоне for не будет работать, потому что вектор создан пустым. Таким образом, цикл будет за пустым диапазоном, и просто ничего не будет делать.
Других решений пока нет …