gpt4 book ai didi

c++ - vector 分割错误

转载 作者:行者123 更新时间:2023-11-28 00:30:54 27 4
gpt4 key购买 nike

我有一段代码使用了 DFS 算法来解决 Leetcode 中的子集问题。问题描述如下。

给定一组不同的整数 S,返回所有可能的子集。

注意:子集中的元素必须按非降序排列。解决方案集不得包含重复的子集。

例如,如果 S = [1,2,3],一个解是:[ [3], [1], [2], [1,2,3], [1,3], [2 ,3], [1,2], [] ]

我的 C++ 代码如下,问题是它输出“=======”,但之后它显示“段错误”。我真的没有得到这个段错误。谁能告诉我代码的哪一部分是错误的?

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main(){

class Solution
{
public:
//Solution();
//~Solution();
std::vector< std::vector<int> > subset(std::vector<int> S){
sort(S.begin(), S.end());
std::vector< std::vector<int> > res;
std::vector<int> temp;
res.push_back(temp);
dfs(res, temp, S, 0);

return res;
}

private:
void dfs(std::vector<std::vector<int> > res, std::vector<int> temp, std::vector<int> S, int pos){
for (int i = pos; i <= S.size()-1; i++)
{
temp.push_back(S[i]);
res.push_back(temp);
dfs(res, temp, S, i+1);
temp.pop_back(); /* code */
}
}

/* data */
};


std::vector<int> array(3);
array[0]=1; array[1]=2; array[2]=3;
std::vector<std::vector<int> > res;
Solution MySolution;
res=MySolution.subset(array);

cout<<"======="<<endl;
cout<<res[0][0]<<endl;

return 0;
}

最佳答案

您传递的是 vector 的拷贝,而不是 vector 引用。

    std::vector< std::vector<int> > res;
std::vector<int> temp;
res.push_back(temp);
dfs(res, temp, S, 0);

此代码创建一个 vector<vector<int>> res; , 向其推送一个空 vector ,然后调用一个在此范围内不更改任何状态的函数。最后,您然后使用 res[0][0] 取消引用. res[0]给出一个空 vector ,所以第二个 [0]段错误。

替换这个函数定义:

void dfs(std::vector<std::vector<int>> res, std::vector<int> temp, std::vector<int> S, int pos){...}

有了这个:

void dfs(std::vector<std::vector<int>>& res, std::vector<int>& temp, const std::vector<int>& S, int pos){...}

关于c++ - vector 分割错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977741/

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