C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのスタックの巻き戻し


ここでは、スタックの巻き戻しの意味を確認します。一部の関数を呼び出すと、アドレスが呼び出しスタックに格納され、関数から戻った後、アドレスがポップアウトされて、残された場所で作業が開始されます。

スタックの巻き戻しは、実行時に関数呼び出しのスタックエントリが削除されるプロセスです。スタック要素を削除するには、例外を使用できます。内部関数から例外がスローされた場合、スタックのすべてのエントリが削除され、メインの呼び出し元関数に戻ります。

例を通して、スタックの巻き戻しの効果を見てみましょう。

サンプルコード

#include <iostream>
using namespace std;

void function1() throw (int) { //this function throws exception
   cout<<"\n Entering into function 1";
   throw 100;
   cout<<"\n Exiting function 1";
}

void function2() throw (int) { //This function calls function 1
   cout<<"\n Entering into function 2";
   function1();
   cout<<"\n Exiting function 2";
}

void function3() { //function to call function2, and handle
   exception thrown by function1
   cout<<"\n Entering function 3 ";
   try {
      function2(); //try to execute function 2
   }
   catch(int i) {
      cout<<"\n Caught Exception: "<<i;
   }
   cout<<"\n Exiting function 3";
}

int main() {
   function3();
   return 0;
}

出力

Entering function 3
Entering into function 2
Entering into function 1
Caught Exception: 100
Exiting function 3

ここで、コントロールがfunction3の情報を格納し、次にfunction2に入り、次にfunction1に入っていることがわかります。その後、1つの例外が発生したため、スタックからすべての情報が削除され、function3に戻ります。


  1. C++での回転関数

    整数Aの配列を指定し、nを配列Aの長さとします。ここで、Bkを、配列A、kの位置を時計回りに回転させて得られる配列と仮定します。ここで、回転は次のように定義できます- F(k)=0 * Bk [0] + 1 * Bk [1] + ... +(n-1)*Bk[n-1]。 ここで、F(0)、F(1)、...、F(n-1)の最大値を見つけます。 したがって、入力がA =[4,3,2,6]の場合、- F(0)=(0 * 4)+(1 * 3)+(2 * 2)+(3 * 6)=0 + 3 + 4 + 18 =25 F(1)=(0 * 6)+(1 * 4)+(2 * 3)+(3

  2. C ++ STL(3.5)でスタック

    C ++ STLでは、スタックはLIFO構造として実装されるコンテナーとして使用されます。 LIFOは後入れ先出しを意味します。 Stackは、本が上下に並べられた本の山と見なすことができ、最後に挿入された本が最初に削除されるため、LIFO構造と呼ばれます。 スタックに関連付けられている操作は- Top() -この関数は、スタックの最上位要素への参照を返します。 構文 --name_of_stack.top() パラメータ -パラメータなし 戻り値 -スタックコンテナの最上位要素への参照 Push() -この関数は、要素をスタックコンテナに挿入するために使用されま