我正在使用兩種類型和向量(我可能會更改爲指針,但不是此刻)使用模板類的手工製作的一組項目。模板類矢量擦除不起作用
添加和輸出值的工作正常,我可以使用彼此訪問鍵和值。
但是我在清除值時遇到了問題。這是我有它的代碼:
bool Remove(Tkey key)
{
for (int i = 0; i < size(); i++)
{
if (keyPtr[i] == key)
{
keyPtr.erase(keyPtr.begin() + (i-1));
valuePtr.erase(valuePtr.begin() + (i-1));
return true;
}
}
return false;
}
所以,當我想用它,它看起來就像這樣:
cout << "Remove Value 6" << endl;
list.Remove(6);
調用當我載體想到的是,該數據關鍵字6將被刪除。不過,我得到這個作爲我的輸出:
關鍵:0值:0
重點:1值:3
鍵:2值:6
鍵:3值:9
鍵:4值:12
鍵:5值:15
密鑰:6值:18
鍵:7值:21
鍵:8值:24
鍵:9值:27
查找值5:15
刪除值6
注意:0值:0
K EY:1個值:3
鍵:2值:6
鍵:3值:9
鍵:4值:12
鍵:0值:0
Key:6 Value:18
Key:7 Value:21
Key :8值:24
鍵:9值:27
所有類別代碼是在報頭中,因爲模板類不能被頭和CPP之間無需cpp文件內部的主要方法拆分。有什麼我應該檢查,或者是與代碼頭內的代碼有關嗎?
編輯:這是我用來得到輸出的代碼。這是在一個名爲「main.cpp的」文件
#include <iostream>
#include <vector>
#include "DictionaryList.h"
using namespace std;
void main()
{
DictionaryList<int,int> list;
for (int i = 0; i < 11; i++)
{
list.Add(i, i*3);
}
for (int i = 0; i < 10; i++)
{
cout << "Key : " << list.Exists(i*3) << " Value : " << list.Get(i) << endl;
}
cout << "Find value 5: " << list.Get(5) << endl;
cout << "Remove Value 6" << endl;
list.Remove(6);
for (int i = 0; i < 10; i++)
{
cout << "Key : " << list.Exists(i*3) << " Value : " << list.Get(i) << endl;
}
system("pause");
}
推測'keyPtr'和'valuePtr'都是'std :: vector'實例? – Rook
測試'keyPtr [i]'然後移除'keyPtr.begin()+(i-1)'看起來很可疑。而不僅僅是因爲多餘的括號。 –
'keyPtr'和'valuePtr'都是'std :: vectors'。 測試'keyPtr [i]'然後'keyPtr.begin()+(i-1)'是程序檢查向量keyPtr中的值,'i'是向量中的位置。如果它找到'keyPtr [i]'和參數中的關鍵變量之間的匹配,則它使用'keyPtr.begin()+(i-1)'擦除該位置的值。 我在一個類的正常'矢量'變量上測試了這個,它正常工作。 –