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

    @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;
    }
    Ответ написан
    Комментировать