簡體   English   中英

節點數組:初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM