Работа с массивами C++

81
05 февраля 2022, 11:20

Подскажите пожалуйста как сформировать массив положительных из уже существующего массива ,как именно работать с размерностью нового массива,если по правилу его значение размерности должно быть фиксированным,но ведь при изменении изначального массива ,количество положительных чисел может изменяться.

Answer 1
  1. Можно использовать статический массив, в котором мы работаем с первыми элементами

    #include <iostream>
    #include <string>
    #include <sstream>
    #include <vector>
    #define MAX 1000
    using namespace std;
    int main(){
    int array1[MAX];
    int array2[MAX];
    int size1 = 30;
    int size2 = 0;
    //Формируем первый массив и выводим на экран
    for (int i = 0; i < size1; i++) {
        array1[i] = -50 + rand() % 100;
        cout << array1[i] << " ";
    }
    cout << endl;
    //Формируем второй массив
    for (int i = 0; i < size1; i++) {
        if (array1[i] > 0) {
            array2[size2] = array1[i];
            size2++;
        }
    }
    //выводим на экран второй массив
    for (int i = 0; i < size2; i++) {
        cout << array2[i] << " ";
    }
    cout << endl;
    return 0;
    }
    
  2. Или использовать контейнер vector

    vector<int> mas1;
    vector<int> mas2;
    for (int i = 0; i < size1; i++) {
        mas1.push_back(-50 + rand() % 100);
        cout << mas1[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < mas1.size(); i++) {
        if (mas1[i] > 0) {
            mas2.push_back(mas1[i]);
        }
    }
    
Answer 2

Для начала я посоветую всё же разобраться в том, что такое динамическая область памяти и как там хранятся данные. Вы наверняка привыкли использовать простой массив с фиксированным количеством хранящих в себе объектов. Но есть "динамические массивы", которые хранятся в куче. Если Вы знаете, что такое указатели, тогда Вам будет не трудно в этом разобраться.

Вот пример динамического массива:

int* array; // указатель на тип данных int
array = new int [5]{1,5,3,6,2}; // выделение памяти под массив на 5 объектов {1,5,3,6,2}
// теперь указатель содержит адрес данного массива и с ним можно работать, как с простым массивом
std::cout << array[1] << std::endl; // output: 5
array[2] = 99;
std::cout << array[2] << std::endl; // output: 99
delete[] array; // но при окончании работы с массивом нужно очистить память
// после очистки памяти указатель array хранит адрес, но на пустой участок памяти  
// и мы можем продолжить работать
array = new int [2]{1,5}; // создадим массив на 2 объекта
// а что если мы хотим добавить еще один объект? - Пожалуйста
int *temp = new int[3];
for(int i < 2) 
{
   temp[i] = array[i];
}
temp[2] = 888;
delete[] array; // вновь очищаем память
array = temp; // говорим, что наш указатель будет знать про наш новый массив
// и дальше можно работать с массивом так же, как и ранее
std::cout << array[2] << std::endl; // output: 888
READ ALSO
С++ оптимизировать вложенный цикл

С++ оптимизировать вложенный цикл

Суть задания: есть список покупок по днямСписок является вектором векторов

91
c++,list и структура

c++,list и структура

Мне надо пробежаться по list,который хранит имеет тип структурыКаким образом можно в цикле перебрать каждый элемент и распечатать? Допустим...

94
Мышь отправляет сообщения, но куда? Откуда их доставать для использования?

Мышь отправляет сообщения, но куда? Откуда их доставать для использования?

У меня обычный "пустой проект" в VS2019(С++), я нашёл как найти координаты окна и курсора,

93
Clang ошибка при компиляции reinterpret_cast

Clang ошибка при компиляции reinterpret_cast

При попытке компиляции программы на C++ выдаёт ошибку reinterpret_cast from 'const char *' to

85