从函数返回多维矢量为主要用途,如何正确使用?(Return multidimensional vec

2019-09-16 14:45发布

我发现,使用矢量是要实现什么,我需要做的最好的方式,但是我现在需要一些澄清。

我需要生成一个外部CPP一个函数内的多维数组,然后进行内部主要使用此功能。

main.cpp中

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

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

vectors.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; // ?
}

Answer 1:

与语法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在这种情况下)。

作为一个经验法则,你希望你的向量通过引用传递和返回值。



Answer 2:

如果你希望你的类的多维向量,它应该是:

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

该函数的签名应该是:

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

和以下内容:

int value1 = value1;
int value2 = value2;

是没有意义的。



Answer 3:

你可以声明这样的多维向量:

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;
}


Answer 4:

你可以像下面这样做:

  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 }


文章来源: Return multidimensional vector from function for use in main, how to use correctly?