Стиль кодирования (именование переменных и т. Д. c) очень важен. Я настоятельно рекомендую изучить их (упомянуто в комментариях выше), но я думаю, что другие люди лучше знают по этому вопросу. Я сам не думаю, что у меня есть хороший стиль кодирования, чтобы дать кому-то полезный совет ... Я просто перейду к тому, что может заставить ваш код работать как минимум.
1) n
в вектор класса назначен неправильно. Вы взяли n
входные данные как глобальную переменную, но на самом деле они не попадают в класс. Вам нужно присвоить значение наподобие p.n = n;
, но поскольку n
в векторном классе является приватным, вы можете попробовать написать функцию для этого. Одним из способов может быть изменение инициализатора на что-то вроде
vector(int a, int sz){
n = sz;
for(int i = 1; i <= n; i ++)
arr[i] = a;
}
Однако я думаю, что написание функции изменения размера, как правило, намного лучшая идея.
В некоторых компиляторах и настройках применение этого может заставить ваш код работать.
2) Как уже упоминалось выше, вы должны фактически выделить указатель arr
. Я понятия не имею, почему вы игнорируете индекс 0 в arr
, но если вы хотите, вы можете выделить (n+1) * sizeof(int)
байтов памяти для arr
на этапе инициализации. Примерно так может работать.
vector(int a, int sz){
n = sz;
arr = (int *)(malloc((n+1)*sizeof(int)));
for(int i = 1; i <= n; i ++)
arr[i] = a;
}
3) Если вам нужно написать векторный класс, это не имеет значения. Но если вас специально не просят написать этот класс, и у вас есть более важная часть задачи, используйте std :: vector. Даже после применения моих исправлений к вашему коду, std :: vector предлагает гораздо лучшую производительность, целый набор полезных функций, и вы, скорее всего, будете делать ошибки и тратить часы на отладку, если вам придется писать целый векторный класс. Избегайте изобретать велосипед.
По-видимому, все, что написано здесь о распределении памяти, кажется неправильным Я понятия не имел о современном распределении памяти C ++. Пожалуйста, игнорируйте их, и, поскольку я не знаю, как стереть принятый ответ, удалите его, если кто-то может. Извините за устаревшую информацию.