○vectorの削除

■判定して削除

#include <stdio.h>
#include <vector> 
#include <algorithm>
#include <functional>

struct cell{
	int no;
	char str[64];
};

bool less3(const cell& o) 
{
  return o.no < 3;
}

int main(){
	std::vector<cell> data;
	cell a;
	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	a.no = 4;strcpy(a.str,"4です");
	data.push_back(a);
	a.no = 5;strcpy(a.str,"5です");
	data.push_back(a);


	std::vector<cell>::iterator new_end =std::remove_if(&data[1],&data[5],less3);//選択範囲をless3にてremove
	data.erase(new_end, data.end());//いらない部分を消す

	{for(int i=0;i<data.size();i++) printf("%s\n",data[i].str);}

	return 0;
}

処理結果
1です
3です
4です
5です

■選択範囲の削除

#include <stdio.h>
#include <vector> 
#include <algorithm>
#include <functional>

struct cell{
	int no;
	char str[64];
};

int main(){
	std::vector<cell> data;
	cell a;
	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	a.no = 4;strcpy(a.str,"4です");
	data.push_back(a);
	a.no = 5;strcpy(a.str,"5です");
	data.push_back(a);

	data.erase(&data[2],&data[3]);//選択範囲を消す

	{for(int i=0;i<data.size();i++) printf("%s\n",data[i].str);}

	return 0;
}

処理結果
1です
2です
4です
5です

■すべての要素を削除

#include <stdio.h>
#include <vector> 
#include <algorithm>
#include <functional>

struct cell{
	int no;
	char str[64];
};

int main(){
	std::vector<cell> data;
	cell a;
	a.no = 1;strcpy(a.str,"1です");
	data.push_back(a);
	a.no = 2;strcpy(a.str,"2です");
	data.push_back(a);
	a.no = 3;strcpy(a.str,"3です");
	data.push_back(a);
	a.no = 4;strcpy(a.str,"4です");
	data.push_back(a);
	a.no = 5;strcpy(a.str,"5です");
	data.push_back(a);

	data.clear();//すべての要素を削除

	{for(int i=0;i<data.size();i++) printf("%s\n",data[i].str);}

	return 0;
}

処理結果




▲トップページ > Windows と C++