c++ の stack を自分で実装しようとして挙動を調べています。その過程で生まれた疑問です。
Q:stack は 値を保持する配列はどうやって宣言しているのでしょうか? あわせて、push()の挙動はどうなるのでしょうか?
ソースコードを追ったのですが、わかりませんでした。
自分が、思うに、選択肢は2つだと思います
① 値を保持する配列の大きさを静的に設定-> push するたび、配列のお尻に一個追加。
(例えばこのサイト: https://www.cprogramming.com/tutorial/computersciencetheory/stackcode.html)
② 配列を動的に確保-> push するたび、大きさを一つ増やした配列を作り直して、値をコピー
実際のところはどうなのでしょうか?
① の場合、stack インスタンスを宣言するたびに常に大きなメモリを確保しないといけないのでメモリがもったいないですよね。
でも
② の場合は、値をコピーするたびに、配列の大きさ
回コピーの処理をしないといけないので、以下のような処理がタイムアウトすると思いました。(実際はタイムアウトしません....)
C++
1#include <iostream> 2#include <stack> 3 4int main() 5{ 6 std::stack<char> n; 7 8 for (size_t i = 0; i < 10000000; i++) 9 { 10 n.push('a'); 11 } 12 13 14}
どなたかお力を貸してくださいm(__)m
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。