C++ Динамический Массив

157
15 ноября 2021, 11:50

Не очень понимаю как реализовать дин.массив на CPP. Нужно что-то похожей на это :

a = []
n = int(input('Количество элементов'))
for i in range(n):
    a.append(int(input()))
Answer 1
#include <iostream>
using namespace std;
void main()
{
   int *a, N;
   cout << "Input N = ";
   cin >> N;
   a = new int[N];
   for(int i=0; i<N; i++)
   {
      cout << "Input a[" << i << "] = ";
      cin >> a[i];
   }
   //.... действия с а
   delete a;
}
Answer 2

1)) new/delete Почти как в си malloc/free.

2)) В C++ это делается так:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;
    int N;
    cout << "Input N = ";
    cin >> N;
    v.resize(N);
    for(int i=0; i<N; i++)
    {
        cout << "Input a[" << i << "] = ";
        cin >> v[i];
    }
} 

new/delete(malloc/realloc/free) лучше не использовать. Обычно от этого больше проблем чем пользы.

3)) Ещё есть такое:

#include <iostream>
using namespace std;
int main()
{
    int N;
    cout << "Input N = ";
    cin >> N;
    int v[N];
    for(int i=0; i<N; i++)
    {
        cout << "Input a[" << i << "] = ";
        cin >> v[i];
    }
}

В MSVC через _alloca В каждом из 3 вариантов есть свои минусы:

  1. Запросто можно получить memory leak, segmentation fault

  2. Работает довольно долго в Debug, сложный шаблонный класс.

  3. Запросто можно получить segmentation fault, stack owerflow

READ ALSO
error C2664 cannot convert argument 1 from &#39;const wchar_t [9]&#39; to &#39;TCHAR *&#39;

error C2664 cannot convert argument 1 from 'const wchar_t [9]' to 'TCHAR *'

Прекрасно компилируется в codeblocks а в Visual studio выдает

345
Фильтрация дискретного сигнала

Фильтрация дискретного сигнала

На фото есть кривая, которая в общем случае через каждые Δx состоит из двух точек (в реальности это координаты двух рядом проложенных проводов)

97
Использование 64-bit кода и 32-bit данных

Использование 64-bit кода и 32-bit данных

Какие преимущества дает использование 64-bit кода и 32-bit данных?

157
Как соединить два массива в С++

Как соединить два массива в С++

Вот такой кодПри выполнении ввожу: 5, (1,2,3,4,5), 5 (6,7,8,9,10), получаю -858993460 -858993460 -858993460 -858993460 -858993460 1 2 3 4 5

166