2014-04-26 4 views
1

저는 C++을 처음 접했습니다. 정말 간단한 해시 테이블을 구현하려고 시도한 다음 해싱 알고리즘이 요소를 올바른 위치에 배치했는지 확인하고 싶습니다. 그러나, 분명히 요소도 전혀 배열에 추가되지 않은 :배열 요소가 성공적으로 추가되지 않았습니까? (C++)

void add(string str, array<string, 2000> data) { 
    int i = makeHash(str) % data.size(); 

    while (data[i++ % data.size()].compare("") != 0) 
     continue; 

    data[i % data.size()] = str; 
    cout << "Added!"; // successfully prints, meaning str was added to data 
} 

int main() { 

    array<string, 2000> data; 
    string str = "The quick brown fox something something"; 
    add(str, data); 

    for (int i = 0; i < data.size(); i++) 
     if (data[i].compare(str) == 0) 
      cout << i; // never prints... so str was never added to data? 

    return 0; 
} 
+0

makeHash 기능은 어디에 있습니까? –

답변

3

당신은 참조로 data 변수를 전달해야 -

void add(string str, array<string, 2000> &data) 

당신이 여기서 뭐하는거야, 그래서 값으로 통과하다 함수가 종료 되 자마자 data 값이 소멸됩니다.

1

참조하여 데이터를 전달하는 시도, 즉

void add (string str, array<string, 2000>& data){...} 

값으로 전달하는 데이터의 복사본은 함수로 전달되는 것을 의미하는 것이다. 또한 하나씩 오류가 있습니다. 난 당신이 갖고 싶어 확신 : 당신은 while 루프를 종료 할 때

data[(i-1) % data.size()] = str; 

i 때문에 여전히 증가합니다.