C++ 在c+中使用结构作为数据类型初始化向量的向量+;

C++ 在c+中使用结构作为数据类型初始化向量的向量+;,c++,c++11,struct,C++,C++11,Struct,我宁愿使用类,但我的要求比这简单。即创建一个二维元素数组,每个元素表示一个结构数据类型。问题是当我尝试在多向量被传递到函数中之后进行变量初始化时。我的代码的简单版本如下: #include <iostream> #include <vector> using namespace std; struct Twalker { int state; float x,y; };` void initialise(vector<vector<

我宁愿使用类,但我的要求比这简单。即创建一个二维元素数组,每个元素表示一个结构数据类型。问题是当我尝试在多向量被传递到函数中之后进行变量初始化时。我的代码的简单版本如下:

#include <iostream>
#include <vector>

using namespace std;

struct Twalker
{
    int state;  
    float x,y; 
};`

void initialise(vector<vector<Twalker>>& walker,int n)
{   
   vector<Twalker> tempWalker;
   for (int i=0; i<n; i++)
   {
     tempWalker.state.push_back(+1); //need help!
     tempWalker.y.push_back(float(rand() % 10)); //need help!
     tempWalker.x.push_back(0.0); //need help!
   }
   walker.push_back(tempWalker);

}

int main(int argc, char** argv) 
{   
   int n = 5;
   vector<vector<Twalker>> walker;
   initialise(walker,n);
}
#包括
#包括
使用名称空间std;
struct Twalker
{
int状态;
浮动x,y;
};`
无效初始化(矢量和沃克,int n)
{   
向量tempWalker;

对于(inti=0;i首先,结构等同于类-唯一的区别是它们的成员默认为public,而类成员默认为private

您的程序存在多个问题,下面是一个可能的解决方案:

#include <iostream>
#include <vector>
#include <ctime>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

struct Twalker
{
    int state;
    float x,y;
};

// Initialize the vector of vectors of Twalker objects
void initialise(vector<vector<Twalker>>& walker, int nv, int n)
{ 
    Twalker wlk;
    vector<Twalker> tempWalker;

    // Outer loop - vector of vectors
    for (int i=0; i<nv; i++){
        // Inner loop - vector of Twalker objects
        for (int j=0; j<n; j++){
            // Temporary Twalker
            wlk.state = 1;
            wlk.x = 0.0; 
            wlk.y = float(rand()%10);
            // Add it to the inner vector
            tempWalker.push_back(wlk);
        }
        // Add the inner vector to the vector of vectors
        walker.push_back(tempWalker);
        // Reset the inner vector
        tempWalker.clear();
    }
}

int main()
{
    // Set the seed
    std::srand(std::time(0));

    int nv = 3, n = 2;
    vector<vector<Twalker>> walker;

    // Initialize   
    initialise(walker, nv, n);

    // Print 
    for (int i = 0; i < nv; i++)
        for (int j = 0; j < n; j++)
            cout << walker[i][j].state << " " 
                 << walker[i][j].x << " "
                 << walker[i][j].y << endl; 
    return 0;
}
#包括
#包括
#包括
使用std::cin;
使用std::cout;
使用std::endl;
使用std::vector;
struct Twalker
{
int状态;
浮动x,y;
};
//初始化Twalker对象的向量向量
无效初始化(矢量和沃克,内华达州,内华达州)
{ 
吐尔克;
向量tempWalker;
//外环-向量的向量

对于(int i=0;我的代码完全错误。您尚未声明n的类型;您将
tempWalker
视为一个Twalker,而它实际上是一个向量…在发布之前阅读您的代码。我知道代码是错误的。感谢您指出n的类型。不幸的是,第二部分还不清楚。而不是
temp沃克;
,为什么不在循环内声明
tempWalker
?@Caleth True!我将作为注释添加它。谢谢。@Caleth,因为将它放在外部并执行清除操作可以避免毫无理由地对分配器施加压力。在许多热点中,在循环外提升向量或字符串可以极大地提高性能。@MatteoItalia reactly是有意义的。我最近通过删除类似的冗余分配和取消分配来提高一些程序的性能。我也将在该注释中添加您的注释。我将深入研究这些概念以使其更好地工作。作为记录,原始程序有和没有使用名称空间。看起来与基于指针的链表相比,使用向量对我来说还不清楚。谢谢你的精彩解释。