Удалить все элементы из массива больше n

Я новичок в программировании. Что-то доставляет мне проблемы с кодом. Предположим, у меня есть массив.

int Array[] = {3,6,9,5,10,21,3,25,14,12,32,41,3,24,15,26,7,8,11,4};

Я хочу удалить все элементы, которые больше 9. Как я могу это сделать?

3

Решение

Вы можете сделать это, если вы используете вектор. Сначала инициализируйте вектор с вашим массивом. Затем используйте функцию remove_if (). Надеюсь, это поможет.

#include <algorithm>
#include <vector>

int main()
{
int Array[] = {3,6,9,5,10,21,3,25,14,12,32,41,3,24,15,26,7,8,11,4};

vector<int> V(Array, Array+20);
vector<int> :: iterator it;

it = remove_if(V.begin(), V.end(), bind2nd(greater<int>(), 9));V.erase (it, V.end());  // This is your required vector if you wish to use vector

}
7

Другие решения

Вы не можете удалить элементы из массива, так как они имеют фиксированный размер.

Если вы использовали std::vectorтогда решение будет выглядеть так:

  #include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>

using namespace std;

int main()
{
std::vector<int> Array = {3,6,9,5,10,21,3,25,14,12,32,41,3,24,15,26,7,8,11,4};

Array.erase(remove_if(Array.begin(), Array.end(), [](int n) { return n > 9; }),
Array.end());
copy(Array.begin(), Array.end(), ostream_iterator<int>(cout, " "));

}

Живой пример: http://ideone.com/UjdJ5h

Если вы хотите придерживаться своего массива, но пометить элементы, которые больше 10, вы можете использовать тот же алгоритм std::remove_if,

  #include <algorithm>
#include <iostream>
#include <iterator>

using namespace std;

int main()
{
int Array[] = {3,6,9,5,10,21,3,25,14,12,32,41,3,24,15,26,7,8,11,4};
int *overwrite_start = remove_if(std::begin(Array), std::end(Array), [](int n){ return n>9; });
fill(overwrite_start, std::end(Array), -1);
copy(std::begin(Array), std::end(Array), ostream_iterator<int>(cout, " "));
}

Выше будет перемещать «стертые» элементы в конец массива, и пометить их с -1.

Живой пример: http://ideone.com/7rwaXy

Обратите внимание на использование в обоих примерах функций алгоритма STL. Второй пример с массивом использует тот же remove_if Алгоритм функции. remove_if возвращает начало «стертых» данных, так как remove_if фактически не удаляет, но перемещает данные в конец последовательности.

5

я попробую обменяться концепцией без использования вектора

int Array[] = {3,6,9,5,10,21,3,25,14,12,32,41,3,24,15,26,7,8,11,4};
int n;
int arr_len = sizeof(Array)/sizeof(int);
void print_array_value() {
int i;
cout << "\n";
for (i = 0; i < arr_len; i++) {
cout << Array[i] << ", ";
}
cout << " : " << arr_len << "\n";
}
void swap_array_value(int start) {
int i;
for ( ; (start+1) < arr_len; start++) {
Array[start] = Array[start+1];
}
}
void remove_array_value() {
int i;
for (i = 0; i < arr_len; i++) {
if (Array[i] > n) {
swap_array_value(i);
arr_len--;
i--;
}
}
}
void main () {
clrscr();
cout << "Enter the N value : ";
cin >> n;
print_array_value();
remove_array_value();
print_array_value();
cout << "Array Length : " << arr_len;
getch();
}
1
По вопросам рекламы [email protected]