C++ 配列のデータ操作で別の問題が発生しています。配列からすべてのゼロを削除して、配列を間引きたいと思います。
だから例えば私が持っていた前に言うと にarray[4] = {1,2,0,0,4}
なるでしょうarray[3] = {1,2,4}
。
メインデータを格納する配列を反復処理するために for ループを使用する必要があること、およびデシメートされたデータを格納するために新しい配列を初期化する必要がある可能性が高いことはわかっていますが、その方法がよくわかりません。
配列の内容がわからない場合、ゼロ以外の値がいくつになるかがわからないため、メモリを動的に割り当てる必要があります。を使用しstd::vector
ます。
std::vector<int> v;
std::copy_if(begin(array), end(array), std::back_inserter(v),
[](int x) { return x != 0; });
最初に avector
から始める場合は、erase-remove を使用してその場でデータを操作できます。
v.erase(std::remove(begin(v), end(v), 0), end(v));
本当に難しい方法でやりたい場合:
// count
auto non_zero_count = std::count_if(begin(array), end(array),
[](int x) { return x != 0;});
// allocate
int* new_array{new int[x]};
std::copy_if(begin(array), end(array), new_array,
[](int x) { return x != 0; });
すべての入力を知っていない限り、ここで固定サイズの配列に到達する解決策は実際にはありません。
配列があり、配列の 0 値を削除してサイズを変更したいとします。
int toResize[] = {4,3,2,0,8,7,9,0,5,4,7,0}; //12 elements
vector<int>resized;
vector<int>::iterator it;
for(int i=0;i<12;i++){
int check = toResize[i];
if(check!=0){
resized.push_back(check);
}
}
for ( it=resized.begin() ; it < resized.end(); it++ )
cout << " " << *it;
満足している場合は、回答済みの質問にマークを付けてください。