А, для C++..Метод erase динамических массивов шаблона vector.
Например, вот для твоего примера:
#include<iostream>
#include<vector>
using namespace std;
main(){vector<int> a;
vector<int>::iterator sIt; vector<int>::iterator tIt;
for(int i=0;i< 20;i++)a.push_back(i%4); sIt=a.begin();
for(tIt=a.begin(); tIt!=a.end(); tIt++)cout<< *tIt; cout<< endl;
for(tIt=a.begin(); tIt!=a.end(); tIt++)if(*tIt==0)a.erase(tIt);
for(tIt=a.begin(); tIt!=a.end(); tIt++)cout<< *tIt; cout<< endl;
cin.get();}
Другие языки программирования и технологии
Подскажите оператор для удаления элемента из массива. Для С++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int a[] = { 1, 0, 2, 0, 3, 0, 4, 0 };
int sz = sizeof(a) / sizeof(a[0]);
vector < int > v(a, a + sz);
cout << "vector:\n";
vector < int >::iterator it;
for (it = v.begin(); it != v.end(); ++it) cout << ' ' << *it;
it = remove(v.begin(), v.end(), 0);
v.resize(it - v.begin());
cout << "\nvector after remove items:\n";
for (it = v.begin(); it != v.end(); ++it) cout << ' ' << *it;
cout << "\n\narray:\n";
for (int *p = a; p < a + sz; ++p) cout << ' ' << *p;
int *eofa = remove(a, a + sz, 0);
cout << "\narray after remove items:\n";
for (int *p = a; p < eofa; ++p) cout << ' ' << *p;
}
Заметь, что размер массива, в отличии от размера vector'a изменить нельзя. Элементы в массиве просто сдвинулись на место нулевых, а его размер остался прежним.
Естественно, если тебе по какой-то причине не нравится шаблонная функция remove, ты можешь написать собственную реализацию.
Ну и если не нравиться код с указателями и итераторами, то его можно переписать, чтобы обращаться к элементам массива и вектора по индексу:
...
for (int c = 0; c < v.size(); ++c) cout << ' ' << v[c];
...
...
for (int c = 0; c < sz; ++c) cout << ' ' << a[c];
int newsz = remove(a, a + sz, 0) - a;
cout << "\narray after remove items:\n";
for (int c = 0; c < newsz; ++c) cout << ' ' << a[c];
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int a[] = { 1, 0, 2, 0, 3, 0, 4, 0 };
int sz = sizeof(a) / sizeof(a[0]);
vector < int > v(a, a + sz);
cout << "vector:\n";
vector < int >::iterator it;
for (it = v.begin(); it != v.end(); ++it) cout << ' ' << *it;
it = remove(v.begin(), v.end(), 0);
v.resize(it - v.begin());
cout << "\nvector after remove items:\n";
for (it = v.begin(); it != v.end(); ++it) cout << ' ' << *it;
cout << "\n\narray:\n";
for (int *p = a; p < a + sz; ++p) cout << ' ' << *p;
int *eofa = remove(a, a + sz, 0);
cout << "\narray after remove items:\n";
for (int *p = a; p < eofa; ++p) cout << ' ' << *p;
}
Заметь, что размер массива, в отличии от размера vector'a изменить нельзя. Элементы в массиве просто сдвинулись на место нулевых, а его размер остался прежним.
Естественно, если тебе по какой-то причине не нравится шаблонная функция remove, ты можешь написать собственную реализацию.
Ну и если не нравиться код с указателями и итераторами, то его можно переписать, чтобы обращаться к элементам массива и вектора по индексу:
...
for (int c = 0; c < v.size(); ++c) cout << ' ' << v[c];
...
...
for (int c = 0; c < sz; ++c) cout << ' ' << a[c];
int newsz = remove(a, a + sz, 0) - a;
cout << "\narray after remove items:\n";
for (int c = 0; c < newsz; ++c) cout << ' ' << a[c];
удалить элемент из массива... .
что есть массив?
При объявлении массива -
char A[5]
мы говорим компилятору выделить память для пяти переменных типа char
можно сказать, что мы объявили пять переменных
char a1;
char a2;
...
char a5;
(в массиве они идут одна за другой)
мы можем удалить переменную char a2 если она равна нулю?
что есть массив?
При объявлении массива -
char A[5]
мы говорим компилятору выделить память для пяти переменных типа char
можно сказать, что мы объявили пять переменных
char a1;
char a2;
...
char a5;
(в массиве они идут одна за другой)
мы можем удалить переменную char a2 если она равна нулю?
можно заменить. или переписать в новый массив. если хотите удалять - обращайтесь к стекам, очередям и проч. на указателях. В принципе можно присвоить элементу NIL, но я бы не советовала. лучше какой-нибудь неиспользуемый символ.
Похожие вопросы
- Удаление повторяющихся элементов из массива С++
- Помогите с С++. Надо найти произведение элементов одномерного массива между первым и последним 0.
- дан двумерный массив С(3,4).Получите новый массив А путём увеличения всех элементов исходного массива на число С.
- Что делаю не так? C++.Удаление элемента массива
- №1.Как вычислить произведение элементов массива(1..5)В Паскале=)))№2.Найти наименьший элемент в массиве!Тоже в Паскале)
- задачка PAscal. найти сумму положительных элементов массива, расположенных до минимального элемента этого массива
- Как удалить нулевые элементы из массива C++. Помогите написать код для того чтобы из массива удалить все нулевые элементы
- алгоритм... по нахождению общих элементов двух массивов
- C#. Элементы одномерного массива размером 7, которые больше среднего значения элементов массива, заменить на 0.
- Как найти кол-во одинаковых элементов в массиве? Подскажите алгоритм.
for (int i=0; i < 21; i++) a.push_back(i % 4);
то такой код может привести к ошибке исполнения:
for (tIt=a.begin(); tIt!=a.end(); tIt++) if (*tIt==0) a.erase(tIt);
безопасно будет:
for(tIt=a.begin(); tIt != a.end();) tIt = (*tIt == 0) ? a.erase(tIt) : tIt + 1;
To ra: спасибо, уже и сам заметил :( Мой вариант исправления будет даже короче.