前提・実現したいこと
C++ の勉強のために双方向リスト実装をしたいです。
発生している問題・エラーメッセージ
うまくリストの更新ができません。
例えば
input
13 5 2set 1 10 3set 2 20 4get 1
と入力したとき期待する出力は 10 なのですが、
実際の出力が
output
120
となってしまいます。
該当のソースコード
c++
1#include <bits/stdc++.h> 2using namespace std; 3struct Node 4{ 5 Node* next; 6 Node* prev; 7 int key; 8 int value; 9 Node(Node* p, Node* n, int k, int val):prev(p),next(n),key(k),value(val){}; 10 Node(int k, int val):prev(NULL),next(NULL),key(k),value(val){}; 11}; 12 13class LRarray 14{ 15public: 16 int capacity; 17 18 Node* head; 19 Node* tail; 20 21 map<int,Node*> mp; 22 23 LRarray(int); 24 void set(int,int); // key value 25 void get(int);// key 26}; 27 28LRarray::LRarray(int cp) 29{ 30 this -> capacity = cp; 31 this -> head = new Node(this -> tail,NULL,0,0); 32 this -> tail = new Node(NULL,this -> head,0,0); 33} 34 35void LRarray::set(int k,int v) 36{ 37 Node* second = new Node(this -> head -> prev,this->head ,k,v); 38 this -> head -> prev -> next = second; 39 this -> head -> prev = second; 40 this -> mp[k] = second; 41 if( (int)(this -> mp.size() ) > ( this -> capacity ) ){ 42 cout << "capacity: " << this -> capacity << endl; 43 cout << "size: " << this -> mp.size() << endl; 44 cout << "Too many items" << endl; 45 } 46 delete second; 47 48 49} 50void LRarray::get(int k) 51{ 52 auto itr = this -> mp.find(k); 53 if(itr != this -> mp.end()){ 54 cout << this-> mp[k]->value << endl; 55 }else{ 56 cout << "There is no value attached key: " << k << endl; 57 } 58} 59 60int main() { 61 62 int n; 63 cin >> n; //入力回数 64 65 int c; 66 cin >> c; //capasity of array 67 68 LRarray arr(c); 69 70 for(int i = 0;i<n;i++){ 71 string command; 72 cin >> command; 73 if(command == "set"){ 74 int key,value; 75 cin >> key >> value; 76 arr.set(key,value); 77 }else if(command == "get"){ 78 int k; 79 cin >> k; 80 arr.get(k); 81 } 82 } 83 84 85 return 0; 86}
試したこと
gdbで実行時のポインタのさしているメモリの番地を確認しました。
arr.set を実行しているとき毎回同じ番地に second が作られていて、リストの要素の追加がうまくいっていないです。
どうすればこれを解決できるのか調べ方がよくわかっていません。
補足情報(FW/ツールのバージョンなど)
Visual Studio Code
バージョン: 1.61.2 (user setup)
コミット: 6cba118ac49a1b88332f312a8f67186f7f3c1643
日付: 2021-10-19T14:57:20.575Z
Electron: 13.5.1
Chrome: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0
OS: Windows_NT x64 10.0.19043
回答1件
あなたの回答
tips
プレビュー