Задать вопрос
@Artem_r66

C++ как заполнить вектор рандом?

Не могу заполнить Вектор рандомными числами. Со статикой так:
void rand_arr()
{
	const int size(100);
	int iArr[size] = { 0 };
	int i(0), j(0);	

	cout << "\n  Массив заполненный случайными числами :\n";
	top();                                                       //Числа сверху массива
	for (i = 0; i < size; i++)
	{
		if ((i == 0) or (i % 10 == 0));       // Выводить на экран строки по 10 значений
		{			
			cout << endl << "  " << j << setw(3) << '|';		// Для чисел слева
			j++;
		}
		iArr[i] = round(rand() % 21);		// Рандом от 0 до 20
		cout << setw(5) << iArr[i];
	}
}


Или, может переделать этот массив в Вектор?

И как передать этот массив из функции?
  • Вопрос задан
  • 5963 просмотра
Подписаться 1 Простой 6 комментариев
Решения вопроса 4
@xxx3Vxxx
Программист C++
#include <vector>
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>

using namespace std;

vector<int> randomVector(size_t size)
{
    vector<int> v(size);
    random_device r;
    generate(v.begin(), v.end(), [&]{return r();});
    return v;
}

int main()
{
    vector<int> v(randomVector(100));
    copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
    return 0;
}
Ответ написан
Комментировать
@sddvxd
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
    int* feel(const short&);
    int count = 20;
    int* pArrMain = feel(count);
    for(int i = 0; i < count; ++i){
        if(i % 10 == 0) cout << '\n';
        cout << pArrMain[i] << " ";
    }
}

int* feel(const short& count = 100){
    if(count <= 0) throw runtime_error("Bad size");
    int* pArr = new int[count];
    for(int i = 0; i < count; ++i)
        pArr[i] = rand() % 21;
    return pArr;
}


хм, у меня разные значения из рандом, может что-то поменяли и не нужно семя менять
Ответ написан
Комментировать
BacCM
@BacCM
C++ почти с рождения
Всё как у тебя только
int iArr[size] = { 0 };

заменить на
vector<int> iArr(size);

И всё будет работать так же.
Ответ написан
Комментировать
@Artem_r66 Автор вопроса
Спасибо всем!
spoiler
#include "pch.h"
#include <time.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

// Вектор с которым проводятся ВСЕ операции
vector<int> i_vec(NULL);

void description()
{
	cout << "\n В одномерном массиве, состоящем из n целых элементов, вычислить:\n"
		 << "\n 1) номер максимального элемента массива;\n"
		 << "\n 2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.\n"
		 << "\n 3) Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, "
		 << "\n    стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.\n\n"
		 << " Будете вводить вручную? ( y / n )\n Если нет, то будет создан массив из ста случайных чисел  :  "; 
}

void i_print()
{
	cout << endl << "  №  | №" << setw(3) << 0 << setw(5) << 1 << setw(5) << 2 << setw(5) << 3 << setw(5) << 4
		<< setw(5) << 5 << setw(5) << 6 << setw(5) << 7 << setw(5) << 8 << setw(5) << 9 << endl
		<< "     |___________________________________________________";
	int i(0), j(0);
	for (vector<int>::const_iterator it = i_vec.cbegin(); it != i_vec.cend(); it++)
	{
		if ((i == 0) or (i % 10 == 0))							// Выводить на экран строки по 10 значений
		{
			cout << endl << "  " << j << setw(3) << '|';		// Для чисел слева			
			j++;
		}		
		i++;
		if (*it == 0)
		{
			cout << "\033[31m";			// Красный цвет в консоли
		}
		cout << setw(5) << *it;
		cout << "\033[1m\033[32m";		// Зеленый цвет в консоли
	}
}

bool yes_no()
{	
	char y;
	cin.clear();
	cin >> y;
	return(y == 'y');
}

void arr()
{		
	string str;		
	cout << endl << " Введите значения через пробел : ";
	cin.ignore();
	getline(cin, str);
	vector<int> temp_vec;
	istringstream is(str);	
	copy(istream_iterator<int>(is), {}, back_inserter(temp_vec));	 

	i_vec.reserve(temp_vec.size());					// Резервируем место по размеру временного вектора
	for (int i = 0; i < temp_vec.size(); i++)
	{
		i_vec.push_back(temp_vec[i]);
	}
}

void rand_arr()
{		
	cout << "\n  Массив заполненный случайными числами :\n";	
	i_vec.reserve(100);								// Резервируем место для ста элементов
	for (int i = 0; i < 100; i++)
	{		
		i_vec.push_back(round(rand() % 21));		// Рандом от 0 до 20		
	}	
}

void i_max()
{	
	int j(-99999);
	for (int i = 0; i < i_vec.size(); i++)
	{
		if (j < i_vec[i]) j = i_vec[i];				// Ищем максимальный элемент массива		
	}
	cout << "\n\n Максимальный элемент массива : " << j;

	cout << "\n Номер максимального элемента массива : ";
	for (int i = 0; i < i_vec.size(); i++)
		if (j == i_vec[i]) cout << i << ' ';	
}

int how_much_0()
{
	int j(0);
	for (int i = 0; i < i_vec.size(); i++)
	{
		if (i_vec[i] == 0) j++;
	}
	return j;
}

void calculation()
{
	int i(0), a1(0), a2(0);
	double e(1);
	for (i; i < i_vec.size(); i++)
		if (i_vec[i] == 0)				// Находим первый элемент == 0
		{
			a1 = i;						// Записываем 1й элемент == 0
			break;						// Переходим к следующему for
		}
	for (++i; i < i_vec.size(); i++)	// Считаем от 1го элемента == 0, прибавляем 1
		if (i_vec[i] != 0)				// До тех пор пока не найдем второй элемент == 0
		{
			e *= i_vec[i];				// Умножаем элементы
			a2 = i + 1;					// Записываем 2й элемент == 0				
		}
		else break;

	cout << "\n Произведение элементов массива, расположенных между первым "
		 << '[' << a1 << ']' << " и вторым " << '[' << a2 << ']'
		 << " нулевыми элементами : " << e << endl;
}

void less_2()
{
	cout << "\033[31m";				// Красный цвет в консоли
	cout << "\n Количество элементов == 0 меньше двух !!!";
	cout << "\033[1m\033[32m";		// Зеленый цвет в консоли
	cout << endl;
}

int main()
{
	setlocale(LC_ALL, "rus");
	srand((unsigned)time(NULL));
	system("color 0A");	

	description();

	bool y = yes_no();
	if (y) arr();
	else rand_arr();	
	//cout << i_vec.capacity() << endl;
	i_vec.shrink_to_fit();				// Убираем лишнее capacity
	//cout << i_vec.capacity() << endl;
	i_print();
	i_max();
	
	cout << endl <<" Количество элементов == 0 : "<< how_much_0();
	if (how_much_0() > 1) calculation();
	else less_2();
	//####################################################################################################################
	// Меняем местами четные и нечетные индексы
	int j;
	for (int i = 0; i < i_vec.size() / 2; i++)
	{
		int temp = i_vec[i];
		for (j = i; j < i_vec.size() - 1; j++)
		{
			i_vec[j] = i_vec[j + 1];
		}
		i_vec[j] = temp;
	}
	i_print();
	//####################################################################################################################

	cout << endl << endl; system("pause"); return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы