Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何初始化结构中的二维向量?_C++ - Fatal编程技术网

C++ 如何初始化结构中的二维向量?

C++ 如何初始化结构中的二维向量?,c++,C++,我需要一个包含2D向量的结构 struct state { vector<vector<int> > p(3,vector<int>(3)); }; state *puzzle; struct状态 { 向量p(3,向量(3)); }; 国家*难题; 但我得到了以下错误: 9 25 C:\Users\Nikita\Documents\AI_8square\u heuristic1.cpp[错误]应在数值常量前加上“,”或“…” 有人能告诉我如何初始化

我需要一个包含2D向量的结构

struct state
{
    vector<vector<int> > p(3,vector<int>(3));
};
state *puzzle;
struct状态
{
向量p(3,向量(3));
};
国家*难题;
但我得到了以下错误:

9 25 C:\Users\Nikita\Documents\AI_8square\u heuristic1.cpp[错误]应在数值常量前加上“,”或“…”

有人能告诉我如何初始化向量吗?
谢谢。

您只需创建一个默认构造函数,然后使用初始化向量:

#include <vector>
struct state
{
    std::vector<std::vector<int> > p;
    state() : p(3,std::vector<int>(3)) {}
};
#包括
结构状态
{
std::向量p;
state():p(3,std::vector(3)){}
};

也可以通过用大括号替换括号来进行初始化,例如:

struct state
{
    vector<vector<int>> p{3,vector<int>(3)};
};
但是,
类型首先提供了自动内存管理,因此无需首先声明指针<代码>提供了一个智能指针,用于在实例超出范围时处理释放。因此,除非您有强制使用指针的要求,否则只需将
stat
的一个实例声明为puzzle,例如:

#include <iostream>
#include <vector>

using namespace std;

struct state
{
    vector<vector<int>> p{3,vector<int>(3)};
};

int main(void)
{
    state puzzle;

    for (auto& i : puzzle.p)    /* fill vectors */
        for (auto& j : i)
            cin >> j;

    for (auto& i : puzzle.p) {  /* display values */
        for (auto& j : i)
            cout << " " << j;
        cout  << '\n';
    }
}
示例使用/输出

$ ./bin/vect2dinit_cin <dat/2dvals.txt
 7 5 16
 2 4 6
 3 8 9

$。/bin/vect2dinit\u您需要
课后声明我为此道歉…但这并不是问题所在..我仍然得到了错误,你可以试试
vector p{3,vector(3)}它仍然不工作:(它必须。什么编译器和版本?谢谢!!虽然我现在没有收到任何错误…但是接受值是否正确:for(int I=0;I puzzle->p[I][j]}??因为它不工作。它只是停止工作…抱歉,如果这一切听起来很愚蠢,但我不知道它为什么不工作:(这是一个不同的问题,超出了如何初始化向量的范围。给出的答案中的向量已经初始化,现在您正在尝试使用它。请在向量初始化后打开一个关于您的用法的不同问题。哦,好的!谢谢您的帮助!Thaaank you sooo more!!!这是准确的这就是我一直在寻找的!!我真的很感谢你的帮助!!谢谢你:D:D!!当然,很高兴能帮上忙。我知道这一定是过程中的一小部分。祝你编码顺利
:)
$ cat dat/2dvals.txt
7 5 16
2 4 6
3 8 9
$ ./bin/vect2dinit_cin <dat/2dvals.txt
 7 5 16
 2 4 6
 3 8 9