Получение ошибки сегментации (объявление вектора)
Узнайте максимальный подмассив неотрицательных чисел из массива. Подмассив должен быть непрерывным. То есть подмассив, созданный путем выбора второго и четвертого элемента и пропуска третьего элемента, недопустим.
Максимальный подмассив определяется в терминах суммы элементов в подмассиве. Под-массив A больше, чем под-массив B, если сумма (A) > сумма (B).
Это мое решение:
vector<int> Solution::maxset(vector<int> &A) {
// Do not write main() function.
// Do not read input, instead use the arguments to the function.
// Do not print the output, instead return values as specified
// Still have a doubt. Checkout www.interviewbit.com/pages/sample_codes/ for more details
vector <int> bla;
int sum[100]={0};
int k = 0;
int j = 1;
for (int i =0; i < A.size(); i++){
if (A[i] > -1){
sum[k] = A[i] + sum[k];
}
else {
k++;
}
}
cout<<sum[0]<<" ";
cout<<sum[1]<<" ";
cout << sum[2] << " ";
int s = 0;
for (int i =0; i< 100; i++){
if (s < sum[i]){
s = sum[i];
k = i;
}
}
cout << s;
int count = 0;
for (int i =0; i < A.size(); i++){
if (A[i] < 0) {
count ++;
}
if (count == k) {
int j = i+1;
int x = 0;
while (A[j] > 0 && j< (A.size()-1)) {
// bla[x] = A[j];
x++;
j++;
}
}
}
return bla;
}
Если я раскомментирую строку bla[x] = A[j], я получу ошибку сегментации. Может кто-нибудь объяснить, как понять эту ошибку? Я где-то читал, что в стеке недостаточно места. Я не понимаю, как. Спасибо
1 ответ
Вы можете передать размер векторному объекту или вызвать его конструктор по умолчанию, который создает векторный объект с размером 0.
std::vector<int> vecInt(10);
for(int i(0); i < vecInt.size(); i++)
vecInt[i] = i;
Или вы можете объявить вектор размером 0:
std::vector<int> vecInt;
vecInt[0] = 10; // segfault
Потому что вы пытаетесь хранить значения в нераспределенном пространстве.
Для решения такой проблемы используйте push_back
хранить и pop
очистить:
Итак, ваш пример может быть таким:
while (A[j] > 0 || j< (A.size()-1)) {
// bla[x] = A[j];
bla.push_back(A[j]);
x++;
j++;
}