我需要一个包含2D矢量的结构。如下所示
struct state
{
vector<vector<int> > p(3,vector<int>(3));
};
state *puzzle;
但是我收到以下错误:
9 25 C:\ Users \ Nikita \ Documents \ AI_8square_heuristic1.cpp [Error] expect','或'...'在数字常量之前
有人可以告诉我如何初始化矢量? 谢谢。
答案 0 :(得分:1)
您可以简单地创建默认构造函数,并使用member initialization list初始化向量:
#include <vector>
struct state
{
std::vector<std::vector<int> > p;
state() : p(3,std::vector<int>(3)) {}
};
答案 1 :(得分:0)
您的初始化也可以通过将括号替换为大括号来实现,例如:
struct state
{
vector<vector<int>> p{3,vector<int>(3)};
};
很好。
现在你如何使用它可能是一个问题。最初,您显示声明指向state
的指针,例如state *puzzle;
但是,这需要您为实例分配存储空间。相当容易做到。您只需要以下内容:
#include <iostream>
#include <vector>
using namespace std;
struct state
{
vector<vector<int>> p{3,vector<int>(3)};
};
int main(void)
{
state *puzzle = new (state);
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';
}
}
但是,<vector>
类型提供了自动内存管理,因此无需首先声明指针。 <vector>
提供了一个智能指针,用于在实例超出范围时处理释放。因此,除非您要求使用指针,否则只需将stat
的实例声明为拼图,例如:
#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';
}
}
无论选择哪种方法,都提供完全相同的输出(当前依赖于您尝试不再使用最初请求的值,除非您使用vector
成员函数添加到现有实例,例如使用push_back()
成员等。
两者都提供相同的输出,例如
*示例输入文件**
$ 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
仔细看看,如果您有其他问题,请告诉我。