C++編で扱っている C++ は 2003年に登場した C++03
という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14
-> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++
の学習を始めるのなら、C++11
よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい
C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。
問題① stack には、vector や list などの STLコンテナが備えている clearメンバ関数に相当する機能がありません。自作関数として実装してください。
空になるまで popメンバ関数を呼び続けます。
#include <iostream>
#include <stack>
typedef std::stack<int> IntStack;
void ClearIntStack(IntStack& iStack)
{
while (!iStack.empty()) {
.pop();
iStack}
}
int main()
{
;
IntStack iStack
for (int i = 0; i < 5; ++i) {
.push(i);
iStack}
(iStack);
ClearIntStack
std::cout << std::boolalpha << iStack.empty() << std::endl;
}
実行結果:
true
関数テンプレートにすれば、要素を int型に限定する必要はありません。
#include <iostream>
#include <stack>
typedef std::stack<int> IntStack;
typedef std::stack<std::string> StringStack;
template <typename T>
void ClearStack(std::stack<T>& s)
{
while (!s.empty()) {
.pop();
s}
}
int main()
{
;
IntStack iStack;
StringStack strStack
for (int i = 0; i < 5; ++i) {
.push(i);
iStack.push("xxx");
strStack}
(iStack);
ClearStack(strStack);
ClearStack
std::cout << std::boolalpha
<< iStack.empty() << "\n"
<< strStack.empty() << std::endl;
}
実行結果:
true
true
いずれにしても、popメンバ関数の呼び出しを繰り返すということは、内部で使用しているコンテナの pop_backメンバ関数を呼び続けているだけです。そのため、たとえば vector を使用しているとすると、内部で確保されたメモリ領域までは解放されません(第5章参照)。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |