[英]Array of Nodes: Initialization
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
struct Node{
string data;
Node* next;
Node(){
data = "";
next = NULL;
}
};
int computeHash(string s, int m){
int p = 1000000007;
int x = 263;
unsigned long long sum = 0;
unsigned long long val = 0;
for(int i = 0; i < s.length(); i++){
val = pow(x, i);
sum = (sum + s[i] * val) % p;
}
sum = sum % m;
return sum;
}
int main(){
int buckets;
cin >> buckets;
int n;
cin >> n;
string tag;
string s;
vector< vector<string> > myStore(n);
for(int i = 0; i < n; i++){
cin >> s;
myStore.at(i).push_back(s);
cin >> tag;
myStore.at(i).push_back(tag);
}
Node** arr= new Node*[buckets];
for(int i = 0; i < n; i++){
if(!myStore[i][0].compare("add")){
s = myStore[i][1];
int hash = computeHash(s,buckets);
cout << hash << endl;
}
}
return 0;
}
我正在嘗試編寫一個程序來實現帶有鏈的哈希。 我正在嘗試創建節點數組,以便兩個字符串具有相同的哈希值時可以追加。
但是我在初始化節點數組時遇到了問題。 我以為數組中的節點將指向NULL。 但是,當我嘗試在gdb中進行調試時,它顯示了其他東西。
有人可以解釋我對此行為的評論有誤嗎? 為什么arr 1和arr [2]指向某個內存位置而不是null。 我也嘗試刪除默認構造函數,但仍然得到相同的結果。 任何幫助,將不勝感激。
您正在分配一個指針數組。 指針沒有構造函數或默認初始化。 您會從分配中獲得隨機內存。
如果要對數組進行NULL修改,則需要自己執行此操作(例如:memcpy等)。
您已初始化字符串大小為0的向量的大小為n的向量。 然后,您想獲取'[1]'(字符串的空向量的第二個元素),您必須分別將它們初始化。 例如在“ for”周期中。
更新。 使用myStore.at(i).at(1)代替myStore [i] [1]可以檢查邊界條件。 (嘗試一下,您將理解向量確實存在的問題)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.