【发布时间】:2022-01-18 16:10:51
【问题描述】:
我有 C++ 结构的多维数组。
#define TOTALSTREAMS 5
#define SEQUENCEHISTORY 20
#define PROCESSINGSIZE 5
#define OVERLAPPINGSIZE 1
#define X_GRID 100//X_GRID and Y_GRID represents the whole building in CM
#define Y_GRID 70
typedef struct {
uint64_t localid;
uint64_t globalid;
int posture;
std::vector<float> feature;
} person;
typedef struct {
std::vector<person> people;
} griddata;
griddata History_host[SEQUENCEHISTORY][TOTALSTREAMS][Y_GRID][X_GRID];
griddata Processed_Array[PROCESSINGSIZE][TOTALSTREAMS][Y_GRID][X_GRID];
需要从一个数组复制到另一个数组。我所做的只是以简单的方式复制如下。它很慢。如何以更快的方式复制这样的数组?
for(int i=0; i<PROCESSINGSIZE; i++){
for(int j=0; j<TOTALSTREAMS; j++){
for(int k=0; k<Y_GRID; k++){
for(int m=0; m<X_GRID; m++){
for(int n=0; n<History_host[i][j][k][m].people.size(); n++){
Processed_Array[i][j][k][m].people.push_back(History_host[i][j][k][m].people.back());
}
}
}
}
}
【问题讨论】:
-
使用
std::array,需要的行数更少。 -
在C++中你不需要那个C结构声明,你可以直接
struct griddata{...} -
successive
push_backBTW 可以省略。 -
你的内部循环可能只是
Processed_Array[i][j][k][m].people.assign(History_host[i][j][k][m].people.begin(), History_host[i][j][k][m].people.end()); -
@AlanBirtles 谢谢