ちょうどこのような:
// 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);