    1 // vecExcept.cpp  -- @CopyLeft by tsaiwn@csie.nctu.edu.tw
    2 // sample of using <vector> in STL -- .at(?) ɷ|X exception
    3 #include <iostream>
    4 #include <vector>
    5 #include <cstdio>
    6 using namespace std;
    7 //
    8 vector<int> x;    // ӭ  vector :-) 
    9 vector<int> y(3);  // y is a  vector of capacity 3
   10 void test( ) {
   11    for(int i=1; i <= 18; ++i) {
   12       x.push_back(i);
   13       cout << "add " << i << ", size: " << x.size( );
   14       cout << ", capacity: " << x.capacity( );
   15       cout << endl;
   16    }
   17    printf("=== ALL in x: ");
   18    for(int i=0; i < x.size( ); ++i)  printf("%d ", x[i]);
   19    printf("\n");
   20 }
   21 ///
   22 int main( ) {
   23    cout << "vector x.capacity = " << x.capacity( )<< ";  ";
   24    cout << "vector y.capacity = " << y.capacity( )<<endl;
   25    cout << "==calling test( )" << endl;
   26    test( );
   27    try {
   28       int k;
   29       for(k = x.size()-3; k < x.capacity( ) + 2; ++k) {
   30         cout << "x[(" << k << "]=" << x[k] << endl;
   31       }
   32    } catch(exception e) {
   33       cout << "Something wrong ... array out of bound?\n";
   34    }
   35    try {
   36       int k;
   37       for(k = x.size()-3; k < x.capacity( ) + 2; ++k) {
   38         cout << "x.at(" << k << ")=" << x.at(k) << endl;
   39       }
   40    } catch(exception e) {
   41       cout << "Something wrong ...\n";
   42    }
   43    cout << "=== bye ===\n";
   44    return 0;
   45 }
   46 /****  `N x Sw initial capacity ҥH @}leqO 0,  y O 3
   47 vector x.capacity = 0;  vector y.capacity = 3
   48 ==calling test( )
   49 add 1, size: 1, capacity: 1
   50 add 2, size: 2, capacity: 2
   51 add 3, size: 3, capacity: 4
   52 ...
   53 add 18, size: 18, capacity: 32
   54 === ALL in x: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   55 x[(16]=17
   56 x[(17]=18
   57 x[(18]=1462647622
   58 x[(19]=1342195795
   59 x[(20]=1162039122
   60 x[(21]=1380930387
   61 ...
   62 x[(33]=6881377
   63 x.at(15)=16
   64 x.at(16)=17
   65 x.at(17)=18
   66 Something wrong ...
   67 === bye ===
   68 
   69 C:\testc>
   70 *****************************************/

