実戦c++の中のvectorシリーズ--vectorのいくつかの異常


今日はvectorのいくつかの異常を書いて、捕まえることができる異常を書きます.
out_of_rangeは配列の境界に相当する.vectorは自動的に容量を増大させますが、インデックスが現在のsizeを超えていると異常が発生します.
#include
#include
using namespace std;
int main()
{
    vector<int>v(4);
    std::cout << v[0] << std::endl;
    std::cout << v[1] << std::endl;
    std::cout << v[2] << std::endl;
    std::cout << v[3] << std::endl;
    std::cout << v[4] << std::endl;//  
    return 0;
}

インデックスのほかvectorも使用する.at()時に境界を越える:
#include        // std::cerr
#include       // std::out_of_range
#include          // std::vector

int main (void) {
  std::vector<int> myvector(10);
  try {
    myvector.at(20)=100;      // vector::at throws an out-of-range
  }
  catch (const std::out_of_range& oor) {
    std::cerr << "Out of Range error: " << oor.what() << '
'
; } return 0; }

std::length_errorはvectorを使用する場合、std::length_を引き起こすことはめったにありません.errorは異常ですが、油断してこのようなコードを書くと:
#include        // std::cerr
#include       // std::length_error
#include          // std::vector

int main (void) {
  try {
    // vector throws a length_error if resized above max_size
    std::vector<int> myvector;
    myvector.resize(myvector.max_size()+1);
  }
  catch (const std::length_error& le) {
      std::cerr << "Length error: " << le.what() << '
'
; } return 0; }

vector* pData;