C++ 良好的面向对象的删除设计,C++;
下面的代码很好地删除了与股票对象关联的符号。这就是糟糕的面向对象设计 我搜索每个股票符号的方式是使用!=or==测试空值C++ 良好的面向对象的删除设计,C++;,c++,C++,下面的代码很好地删除了与股票对象关联的符号。这就是糟糕的面向对象设计 我搜索每个股票符号的方式是使用!=or==测试空值 bool hashmap::remove(char const * const symbol, stock &s, int& symbolHash, int& hashIndex, int& usedIndex) { if ( isAdded == 0 ) return false; if ( hashTable[isRemov
bool hashmap::remove(char const * const symbol, stock &s,
int& symbolHash, int& hashIndex, int& usedIndex)
{
if ( isAdded == 0 ) return false;
if ( hashTable[isRemoved].symbol == symbol ) return true;
else
{
symbolHash = this->hashStr( symbol );
hashIndex = symbolHash % maxSize;
usedIndex = hashIndex;
}
for ( int integer = 0; integer < maxSize; integer++ )
{
if ( hashTable[usedIndex].symbol != NULL &&
strcmp( hashTable[usedIndex].symbol, symbol ) == 0 )
{
isAdded--;
isRemoved = hashIndex;
s = &hashTable[usedIndex];
delete hashTable[usedIndex].symbol;
hashTable[usedIndex].symbol = NULL;
return true;
}
++usedIndex %= maxSize; // wrap around if needed
}
return false;
}
因此,我改变了逻辑测试空股票符号或找到股票符号的方式。它们是一种删除我的股票符号而不必重新进行查找和搜索的方法吗
这是面向对象设计中删除的正确方法吗?如何处理插入冲突?大多数标准的解决方案,如线性搜索打开的插槽,或生成新的哈希,都会使删除元素成为问题。如果删除是常见的,请考虑使用列表结构。 如何处理插入冲突?大多数标准的解决方案,如线性搜索打开的插槽,或生成新的哈希,都会使删除元素成为问题。如果删除是常见的,则考虑使用列表结构来代替。
首先,“面向对象的设计”非常含糊。p>
isAdded
是否为成员变量?现在还不清楚它是否是,并且创建了另一个依赖于此函数的依赖项,当查看签名时,这种依赖项并不明显。同样的事情也适用于isRemoved
通常,一个具有5个参数的函数接近于显示对该函数有太多依赖关系(无论中的不可见依赖关系是添加的
,是删除的
,还是哈希表
)
我不确定hashTable的类型是什么,但是在2009年你不应该调用delete。您可以使用auto\u ptr
,shared\u ptr
,unique\u ptr
(在C++0x中)。当不再需要你的资源时,这些将释放你的资源。如果您使用的是STL容器,那么不要使用auto_ptr
如果您想在C++中使用哈希表,则应该考虑使用。这将是一个比我们99.9999%的人能够完成的更好的实现
使用散列映射时,可以调用void erase(迭代器优先,迭代器最后)
来擦除/删除元素。首先,“面向对象设计”非常模糊
isAdded
是否为成员变量?现在还不清楚它是否是,并且创建了另一个依赖于此函数的依赖项,当查看签名时,这种依赖项并不明显。同样的事情也适用于isRemoved
通常,一个具有5个参数的函数接近于显示对该函数有太多依赖关系(无论中的不可见依赖关系是添加的
,是删除的
,还是哈希表
)
我不确定hashTable的类型是什么,但是在2009年你不应该调用delete。您可以使用auto\u ptr
,shared\u ptr
,unique\u ptr
(在C++0x中)。当不再需要你的资源时,这些将释放你的资源。如果您使用的是STL容器,那么不要使用auto_ptr
如果您想在C++中使用哈希表,则应该考虑使用。这将是一个比我们99.9999%的人能够完成的更好的实现
使用散列映射时,可以调用
void erase(迭代器优先,迭代器最后)
来擦除/删除元素。right。这实际上是一项任务。我的指导老师告诉我不能用delete dt.right删除。这实际上是一项任务。我的导师告诉我我不能用delete dt删除。
hashTable[usedIndex].symbol = hashTable[NULL].symbol