可以聲明一個多維向量是這樣的:
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;
}
謝謝。我不知道向量需要的大小,直到它在函數中創建,所以我需要在沒有默認值的情況下在main中定義它,並通過引用傳遞它? – 2012-04-17 14:38:50
@JackFarrow你當然可以做到這一點。你也可以不用'main'初始化它,然後按值返回:'vector> myVect = function(4,6);' –
dasblinkenlight
2012-04-17 14:43:09
謝謝。你能解釋一下上面的代碼中發生了什麼嗎?我認爲這是定義一個向量(像一個int,稱爲myVect),並將其賦值給函數中創建的向量值?這是最好的表現嗎? – 2012-04-17 14:53:34