gpt4 book ai didi

c++ - 获取段错误( vector 声明)

转载 作者:行者123 更新时间:2023-12-02 10:39:59 27 4
gpt4 key购买 nike

从数组中找出非负数的最大子数组。
子阵列应该是连续的。也就是说,通过选择第二个和第四个元素并跳过第三个元素创建的子数组是无效的。

最大子数组是根据子数组中元素的总和来定义的。如果 sum(A) > sum(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] 行,我会收到段错误。有人可以解释如何理解这个错误吗?我在某处读到堆栈中没有足够的空间。我不明白怎么做。
谢谢

最佳答案

您可以将大小传递给 vector 对象,也可以调用它的默认构造函数,该构造函数创建一个大小为 0 的 vector 对象。

std::vector<int> vecInt(10);
for(int i(0); i < vecInt.size(); i++)
vecInt[i] = i;

或者你可以声明一个大小为 0 的 vector :
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++;
}

关于c++ - 获取段错误( vector 声明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46013564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com