我正在开发一个项目,其中包括使用具有两种类型和向量的模板类(我可能会更改为指针,但目前不会)的手工制作的排序集。
添加和输出值工作正常,我也可以使用彼此访问键和值。
但是我在删除值时遇到了问题。这是我的代码:
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
键:1 值:3
键:2 值:6
键:3 值:9
键:4 值:12
键:0 值:0
键:6 值:18
键:7 值:21
键:8 值:24
键:9 值:27
所有的类代码都在头文件中,因为模板类不能在头文件和 cpp 之间拆分,而 cpp 文件中没有 main 方法。有什么我应该检查的,还是与标题中的代码有关?
编辑:这是我用来获取输出的代码。它在一个名为“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");
}