【发布时间】:2021-02-16 05:25:02
【问题描述】:
我是 cpp 领域的新手。 下面是我的cpp代码。当我使用在线 c++ 编译器时, 为什么会发生退出、分段错误以及我的代码有什么问题。 谢谢大家。
问题描述: 给定一个整数数组 arr,要求您计算每个索引 i 的所有整数的乘积,除了该索引处的整数(即除 arr[i] 之外)。实现一个函数 arrayOfArrayProducts,它接受一个整数数组并返回一个产品数组。 在不使用除法的情况下求解并分析解决方案的时间和空间复杂性。
#include <iostream>
#include <vector>
using namespace std;
vector<long> arrayOfArrayProducts(const vector<int>& arr)
{
vector<long> res = {};
int n = arr.size();
// handles edge cases as well
if(n==0 || n==1){
return res;
}
int product;
// your code goes here
for(int i=0; i<n; i++){
product = 1;
for(int j=0; j<n; j++){
if(i!=j){
product = arr[j]*product;
}
res[i]=product;
}
}
return res;
}
int main() {
// vector initiallize
//vector<int> arr{8, 10, 2};
const vector<int> arr;
int n = arr.size();
vector<long> ans(n,0);
ans = arrayOfArrayProducts(arr);
for(int i=0; i<n; i++){
cout<< ans[i] <<' ';
}
return 0;
}
【问题讨论】:
-
你忘了给
res一个实际大小。因此,由于向量不包含任何元素,任何i的res[i]将具有未定义的行为。考虑使用res.push_back(product);而不是res[i] = product;,但请确保您在j 循环外部 执行此操作,而不是像您现在所做的那样在其中执行此操作——还要注意n == 1的特殊情况将中断调用者,因为这也返回一个空向量,但调用者假定它有 1 个元素。 -
如果您不知道向量的大小,可以使用 push_back 等方法将数据插入到向量中,它会根据需要自动调整大小。
-
谢谢大家,非常感谢!