数组到std :: vector转换

时间:2013-08-21 16:17:37

标签: c++ arrays vector

我在我的代码函数中用3D std :: vector替换了一个3D数组,它在编译时进入无限循环。如果我使用了一个3D数组arr [] [] []它将完美地工作你可以给我一个提示,我真的需要使用一个向量而不是一个数组。谢谢:)

我的初始代码是:

bool sol(int arr[12][12][13]) {
    int row,col;

    if(!find_empty(arr,row,col)) return true;

    for(int i=1;i< arr[row][col].size();i++) {
        if(is_working(arr,row,col,arr[row][col][i]) ) {
            arr[row][col][0] = arr[row][col][i];

            if(sol(arr)) return true;

            arr[row][col][0] = 0;
        }
    }

    return false;
}

我将 arr 替换为

std::vector<std::vector<std::vector<int> > > vec;
vec.resize(12);
for(int i=0;i<12;i++)
{
    vec[i].resize(12);
    for(int j=0;j<12;j++)
    {
        vec[i][j].resize(13);
        for(int k=0;k<13;k++)
            vec[i][j][k]=table[i][j][k];
    }
}

现在它进入了一个无限循环!初始代码没有错误,它是一个简单的回溯。我用 vec <替换 arr 后出现问题/strong>。你能给我一些建议。请先发帖!

1 个答案:

答案 0 :(得分:3)

for(int i=1;i<=vec[row][col].size();i++)

应该是

for(int i=1;i<vec[row][col].size();i++)

除非你想跳过矢量中的第一项,否则你可能真的打算这样:

for(int i=0;i<vec[row][col].size();i++)

您还可以考虑使用迭代器,这会使您的代码更加灵活

for(auto it = vec[row][col].begin(); it != vec[row][col].end(); it++)

也是一个样式点,你在相同的代码位中引用vec [row] [col]。它有助于做到这样的事情的可读性:

vector<someType>& tempVector = vec[row][col];

然后在整个代码中传播该引用。

另外,也可能是最重要的:

k++;//Where on earth did you declare/define k and what else is it doing?????????
return false;