我发现,使用矢量是要实现什么,我需要做的最好的方式,但是我现在需要一些澄清。
我需要生成一个外部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; // ?
}
与语法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
在这种情况下)。
作为一个经验法则,你希望你的向量通过引用传递和返回值。
如果你希望你的类的多维向量,它应该是:
vector<vector<Class> > vectorname;
return vectorname;
该函数的签名应该是:
vector<vector<Class> > function(value1, value2)
和以下内容:
int value1 = value1;
int value2 = value2;
是没有意义的。
你可以声明这样的多维向量:
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;
}
你可以像下面这样做:
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?