実戦c++の中のvectorシリーズ--vectorのいくつかの異常
4567 ワード
今日はvectorのいくつかの異常を書いて、捕まえることができる異常を書きます.
out_of_rangeは配列の境界に相当する.vectorは自動的に容量を増大させますが、インデックスが現在のsizeを超えていると異常が発生します.
インデックスのほかvectorも使用する.at()時に境界を越える:
std::length_errorはvectorを使用する場合、std::length_を引き起こすことはめったにありません.errorは異常ですが、油断してこのようなコードを書くと:
vector* pData;
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;