C ++在不知道位置的情况下删除矢量中的特定值
if (find(visitable.begin(), visitable.end(), ourstack.returnTop())) { ... }
我想,以确定是否在栈上的字符ourstack
可以在载体中找到visitable
。 如果是的话,我希望这个角色从visitable
被删除。
我将如何编码? 我知道载体使用erase
,但这需要该字符的具体位置(我不知道)。
这是为了我的迷宫寻路工作。
另外,我的returnTop
给我一个错误: class "std.stack<char..." has no member returnTop
。 我在我的程序的顶部声明了#include。 这里发生了什么事?
提前致谢!
如果你使用find
,那么你已经知道角色的位置。 find
返回一个迭代器到find
该字符的位置,或者返回一个迭代器,如果它找不到的话。
vector<?>::const_iterator iter =
find(visitable.begin(), visitable.end(), ourstack.top());
if( iter != visitable.end() )
{
visitable.erase( iter );
}
至于stack
,你正在寻找的功能是top()
。 标准C ++库不使用camelCased标识符,看起来更像Java或C#的东西。
像这样:
// Note assume C++0x notation for simplicity since I don't know the type of the template
auto character = ourstack.top();
auto iter = std::find(visitable.begin(), visitable.end(), character);
if (iter != visitable.end())
visitable.erase(iter);
returnTop在堆栈类中不存在,但top是。
或者,如果你想要一些通用的(而相当华丽的方式)做到这一点:
// Assume type of vector and stack are the same
template <class T>
void TryRemoveCharacter(std::vector<T>& visitable, const std::stack<T>& ourStack)
{
// Note, could have passed a ref to the character directly, which IMHO makes more sense
const T& ourChar = ourStack.top();
visitable.erase(std::remove_if(visitable.begin(), visitable.end(), [&ourChar](const T& character)
{
// Note, this will not work http://www.cplusplus.com/reference/algorithm/find/
// says that std::find uses the operator== for comparisons but I doubt that
// as compilers typically do not generate equal comparison operator.
// See http://stackoverflow.com/questions/217911/why-dont-c-compilers-define-operator-and-operator
// It's best to either overload the operator== to do a true comparison or
// add a comparison method and invoke it here.
return ourChar == character;
}));
}
注意:这种替代方式可能不是一个好的构思,因为您的老师可能会发现您突然间引入高级C ++功能(C ++ 0x)的可疑内容。
然而,为了知识的好奇,它可以工作;)
以下是您可以如何使用它的方法:
TryRemoveCharacter(visitable, ourstack);
链接地址: http://www.djcxy.com/p/73779.html
上一篇: C++ Deleting a specfic value in a vector without knowing location
下一篇: Struct member equality without overloading operator== in C++