我正在创建一个应用程序,并被矢量“重新分配”所困扰。我想做的是传递元组<string, int, vector<Log> *>
,其中第三个元素是指向vector<vector<Log>>
的指针。这样做:Vector <Log> *pointer = &arr[length];
。当我尝试打印地址时,它可以正常工作。我尝试这样做时出现问题:
(*get<2>(*it)).resize(++get<1>(*it));
尝试像(*pointer).resize();
一样重新分配
我要制作的是元组(类似于关系数据库):
tuple<string, int, vector <Log> *>
是唯一ID,该ID的条目数,指向该行第一个元素的地址的指针
因此,基本上,我将具有有关唯一ID,每个IP的行数以及指向该特定行的指针的基本信息的元组。
第一次出现IP时,它将被添加到元组中,并且数据首先存储在其中。彼此相同的IP将在元组中进行检查,当发现它的数据需要存储在下一个可用空间中(大小调整为1)。希望它不太复杂。
这是我当前正在使用的代码:(请注意,变量a
的类型为Log
)
typedef vector<tuple<string, int, vector <Log>*>> lookup_list;
lookup_list lookup;
vector<vector<Log>> arr;
vector <Log> *pointer;
int length = 0;
string ip;
for (int i = 0; i < arr_size; i++){
ip = a[i].ip_address;
auto it = find_if(lookup.begin(), lookup.end(), [ip](const tuple<string, int, vector <Log>*>& e){
return get<0>(e) == ip;
});
if (it == lookup.end()){
arr.resize(length + 1);
arr[length].resize(1);
pointer = &arr[length];
arr[length][0] = a[i];
lookup.push_back(tuple<string, int, vector <Log> *>(ip, 1, pointer));
length++;
}
else {
get<1>(*it)++;
(*get<2>(*it)).resize(get<1>(*it));
(*get<2>(*it))[(get<1>(*it))-1] = a[i];
}
我遇到的错误基本上是试图访问超出范围的内存或_Xlength_error(“ vector too long”);
应该注意,这是在相同大小的第一个IP上发生的,因此不确定为什么会触发该错误...