とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

erase, std::vector

STL―標準テンプレートライブラリによるC++プログラミング 第2版

// P138 ex06-08.cpp
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cassert>
template<typename Container>
Container make(const char* s){
 const std::string str(s);
 return Container(str.begin(), str.end());
}
int main(){
 using std::cout;
 using std::endl;
 using std::string;
 using std::vector;
 using std::find;
 cout << "Demonstrating STL vector erase function." << endl;
 vector<char> v = make<vector<char>>("remembering");
 vector<char>::const_iterator iter = find(v.begin(), v.end(), 'm');
 assert(*iter == 'm' && *(iter+1) == 'e');

 v.erase(iter--);
 assert(*iter == 'e' && *(iter+1) == 'e');
 assert(v == make<vector<char>>("reembering"));

 v.erase(iter--);
 assert(*iter == 'r');
 assert(v == make<vector<char>>("rembering"));

 v.erase(iter, iter + 3);
 assert(v == make<vector<char>>("bering"));

 v.erase(v.begin() + 1);
 assert(v == make<vector<char>>("bring"));
 cout << " --- Ok." << endl;
}