从函数返回多维向量以在main中使用,如何正确使用
Return multidimensional vector from function for use in main, how to use correctly?
我发现使用向量是实现我需要做的事情的最佳方式,但是我现在需要一些澄清。
我需要在外部 CPP 的函数中生成一个多维数组,然后在 main 中使其可用。
主.cpp
// 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; // ?
}
vector
的语法需要一点时间来适应。int
的 2D 矢量如下所示:
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 }
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- CMake-按正确顺序将项目与C运行时对象文件链接
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何使用用户输入在C++中正确填充2D数组
- node-gyp 在 macOS 上未正确链接库
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 在 C++ 中解析 main 函数的大量输入的正确方法是什么
- void 函数将数组发送回 main,但我无法让数组正确输出值
- 程序流并以安全而雄辩的方式正确返回Main()
- (C )当在同一类中调用时,污点指针返回正确的值,而从MAIN调用时为0
- 构造函数在 main 中调用,但对象未正确创建
- 从函数返回多维向量以在main中使用,如何正确使用
- 在main.cpp之外创建一个类来使用QtQuick2ApplicationViewer的正确方法是什么?
- 我如何通过多个函数传递数据并在main中正确调用它们
- 阶乘在main中显示错误的答案.在函数中正确计算