※ 引述《avhacker (我想把整片天空打開)》之銘言:
: 單純講 array, 可以考慮 boost 的做法.
如果是要多維度的 array, 不如用 boost::multi_array
http://www.boost.org/libs/multi_array/doc/user.html#sec_example
上列網頁範例是:
#include "boost/multi_array.hpp"
#include <cassert>
int
main () {
// Create a 3D array that is 3 x 4 x 2
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][4][2]);
// Assign values to the elements
int values = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
A[i][j][k] = values++;
// Verify values
int verify = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
assert(A[i][j][k] == verify++);
return 0;
}
也支援 sub-array view 和 re-shape 的用法,詳情參考網頁
不過上次我想拿他來試用時,最後卻放棄了
原因是我找不到一層迴圈 travel 整個 array 的方法(也許有,那時沒找到)
我希望我能寫:
std::for_each(arr.begin(), arr.end(), SomeFunc());
而不是要 begin() 之後再 begin() 一次…
所以最後我是用一維去模擬多維
--
In Lisp, you don't just write your program down toward the language,
you also build the language up toward your program.
《Programming Bottom-Up》- Paul Graham 1993
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.5.168