Другие языки программирования и технологии

В чем ошибка программы? ? C++

Нужно удалить из массива все четные элементы, но сделать это в функциях.. .Без функций все работает.. .А как стал в функции делать.. .Ошибки выдает.. .Помогите разобраться? !
http://pastebin.com/iN2sDcdQ -вот прога
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
void remove_even(int *, size_t &);
void show(int *, size_t);
int main() {
    locale::global(locale(""));
    srand(unsigned(time(0)));
    cout << " Введите размер массива: ";
    size_t size;
    cin >> size;
    cout << "\n Исходный массив: \n";
    int * vector = new int [size];
    for (rsize_t n = 0; n < size; n++) vector[n] = 1 + rand() % 99;
    show(vector, size);
    remove_even(vector, size);
    cout << "\n Массив после удаления чётных элементов: \n";
    show(vector, size);
    delete[] vector;
    vector = NULL;
    cin.get(); cin.get();
    return 0;
}
void show(int * _vector, size_t _size) {
    for (rsize_t n = 0; n < _size; n++) cout << setw(4) << _vector[n];
    cout << endl;
}
void remove_even(int * _vector, size_t & _size) {
    size_t newsize = _size;
    for (rsize_t n = 0; n < _size; n++) if (~_vector[n] & 1) --newsize;
    if (newsize < _size) {
        int * temp = new int [_size];
        for (rsize_t n = 0; n < _size; n++) temp[n] = _vector[n];
        delete[] _vector;
        _vector = NULL;
        _vector = new int [newsize];
        rsize_t m = 0;
        for (rsize_t n = 0; n < _size; n++) if (temp[n] & 1) _vector[m++] = temp[n];
        delete[] temp;
        temp = NULL;
        _size = newsize;
    }
}
AM
Adlet Maksutov
57 068
Лучший ответ
Функция должна принимать указатель на массив. Т. е напиши int funct(int *C,int l); *С-массив, l-его длина, Обращатся: funct(C,l); Т. е функция Меняет массив, который находится в другой функции. Имя массива в функции может быть любым, все равно он будет менять тот, который передается функции. Главное - звездочка.
Paizyvai Muminov
Paizyvai Muminov
7 898
Функции нужны, чтобы действия, которые вы часто делаете не писали их снова и снова, а чтобы один раз объявить и потом просто использовать. Когда вы передаете параметры в функцию, создаются их копии и программа работает с КОПИЯМИ переменных, а не оригиналами, поэтому любые действия, которые вы делаете не сохраняются.
Чтобы ваши значения, которые функция посчитала сохранились, вам надо их вернуть и записать в эту переменную. Для этого вместо:

void mass(int i, ..)
{}

напишите так:
int mass (int i,...)
{
//какие-то вычисления
return i; // возвращаем результат вычислений
}

int i = mass(30, 60) ; // например функция складывала 30 + 60 и в переменную запишется //результат вычисления, а именно - 90

Прошу заметить, что вернуть можно только одну переменную. Если вам нужно больше, то либо используйте массив, либо указатели (тогда в параметры будут передаваться не копии, а оригиналы и все действия над переменными будут сохранятся, но такой подход не желателен).
Сергей Гуда
Сергей Гуда
2 586