2

我发现使用向量是实现我需要做的最好的方法,但是我现在需要澄清一下。

我需要在外部 CPP 的函数中生成一个多维数组,然后在 main.xml 中使其可用。

主文件

// include vector, using namespace etc.
function(2, 4);

// how to access vector elements here - vectorname[2][4]->classvar;  ? 

向量.cpp

void function(value1, value2){
// class def
int value1 = value1;
int value2 = value2;
 vector<int>(value1)<vector<Class>(value2) vectorname>; // incorrect syntax? or new * vector ?

return vectorname; // ?
}
4

4 回答 4

3

with 的语法vector需要一点时间来适应。一个 2D 向量int看起来像这样:

vector<vector<int> > myVector;

如果您想设置特定尺寸,请使用具有大小的构造函数:

vector<vector<int> > myVector(10, vector<int>(5));

这会产生一个10x5零向量。你可以这样做

vector<vector<int> > myVector(10, vector<int>(5, -1));

为您的元素提供初始值(-1在本例中)。

根据经验,您希望向量通过引用传递并按值返回。

于 2012-04-17T14:27:46.800 回答
1

如果你想要你的类的多维向量,它应该是:

vector<vector<Class> > vectorname;
return vectorname;

函数的签名应该是:

vector<vector<Class> > function(value1, value2)

以及以下内容:

int value1 = value1;
int value2 = value2;

是没有意义的。

于 2012-04-17T14:27:10.570 回答
1

您可以像这样声明一个多维向量:

std::vector< std::vector<int> > v;

您还可以使用 typedef 使代码更易于遵循:

typedef std::vector<int> int_vector;
typedef std::vector<int_vector> int_matrix;

像第一个示例一样编写时,应避免一个接一个地编写右尖括号,以免编译器将其与>>运算符混淆。

您还应该避免从函数返回这样的对象,因为此操作涉及复制整个向量。相反,您可以通过引用传递向量,例如:

void process(int_matrix& m)
{
    // m.push_back(...)
}

int main(int argc, char* argv[])
{
    int_matrix m;

    // Initialize m here.
    // ...

    // Call your methods.
    process(m);

    // ...

    return 0;
}

编辑:

您可以像这样构造您的代码:

// int_matrix.hpp

#ifndef _INT_MATRIX_HPP
#define _INT_MATRIX_HPP

#include <vector>

typedef std::vector<int> int_vector;
typedef std::vector<int_vector> int_matrix;

extern void process(int_matrix& m);

#endif // ~_INT_MATRIX_HPP

.

// int_matrix.cpp

#include "int_matrix.hpp"

void process(int_matrix& m)
{
    m.clear();
    // ...
}

.

// main.cpp

#include "int_matrix.hpp"
#include <iostream>

int main(int argc, char* argv[])
{
    int_matrix m1;
    int_matrix m2;

    // ...

    process(m1);
    process(m2);

    // ...

    return 0;
}
于 2012-04-17T15:01:49.553 回答
0

你可以这样做:

  1 #include <iostream>
  2 #include <vector>
  3 using namespace std;
  4 
  5 class Test {
  6 public:
  7     Test()
  8     {
  9         cout << "Test()" << endl;
 10     }
 11     ~Test()
 12     {
 13         cout << "~Test()" << endl;
 14     }
 15 };
 16 typedef Test classvar_t;
 17 typedef vector<classvar_t> d2_t;
 18 typedef vector<d2_t > md_vector_t;
 19 md_vector_t foo(int value1, int value2)
 20 {
 21     return md_vector_t(value1, d2_t(value2));
 22 }
 23 
 24 int main()
 25 {
 26     md_vector_t v = foo(3, 4);
 27     cout << "--------" << endl;
 28     return 0;
 29 }
于 2012-04-17T14:46:26.363 回答