C++中如何在类的成员函数内访问该类的vector类型成员
类成员vector的访问方法
在LISCH类的非静态成员函数(比如insert)中,直接使用成员变量名data_vec即可访问,不需要加类名前缀LISCH.,也可以可选加this->明确指代类成员,比如this->data_vec。
现有代码的其他问题修正
1. 构造函数逻辑修复
你当前的构造函数没有初始化data_vec的长度,直接在insert中访问下标会触发越界崩溃,修改构造函数如下:
LISCH::LISCH(int table_size){ // 按传入的大小初始化vector长度 data_vec.resize(table_size); }
2. 空位置判断逻辑修复
data_vec存储的是lisch_entry实体对象,不是指针,不能和NULL比较。你已经在lisch_entry的构造函数中将valid字段初始化为false,直接判断该字段即可:
if(!data_vec[add].valid) { // 该位置为空,可以写入数据 }
3. 元素写入逻辑修复
std::vector的insert方法是用于新增元素、改变vector总长度的接口,你要修改指定位置已有元素的内容,直接赋值即可:
data_vec[add].data = new_data; data_vec[add].valid = true; // 可根据你的哈希表冲突处理逻辑补充link字段赋值
修正后完整的insert示例
void LISCH::insert(int new_data){ int add = new_data % data_vec.size(); // 用实际哈希表长度取模,不要写死固定值 if(!data_vec[add].valid) { data_vec[add].data = new_data; data_vec[add].valid = true; data_vec[add].link = -1; // 可根据你的冲突处理逻辑修改初始值 return; } // 此处补充哈希冲突的处理逻辑 }
内容的提问来源于stack exchange,提问作者Oğulcan
相关产品推荐
相关产品推荐

