2015-09-30 4 views
-3

Я хочу найти конкретный элемент из массива и затем сместить массив, чтобы удалить этот элемент. У меня есть список целых чисел {1, 2, 3, 4, 5, 6, 7, 8, 9} и вы хотите удалить целое число. 2.Удалить и сдвинуть массив C++

В настоящее время я получаю сообщение об ошибке: размер хранилища 'new_ints' на линии не известно:

int new_ints[]; 

Не знаете, что это значит или как я могу это исправить?

Вот мой код:

int main() { 

    int tmp = 2; 
    int valid_ints[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 

    int new_ints[]; 
    new_ints = stripList(tmp, valid_ints); 

    for (int i = 0; i < sizeof(new_ints); i++) 
    cout << new_ints[i] << endl; 

    return 0; 
} 


int *stripList (int tmp, int valid_ints[]){ 

    for (int i = 0; i < sizeof(valid_ints); i++){ 
    for (int j = tmp; j < sizeof(valid_ints); j++){ 
     valid_ints[j] = valid_ints[j+1]; 
    } 
    } 
    return valid_ints; 
} 
+0

Компилятор утверждает, правильно, вы не указали время компиляции доступного размера для вашего массива здесь: 'int new_ints [];'. Вместо этого вы предпочитаете использовать 'std :: vector '. –

+0

Используйте 'std :: vector' и' std :: remove'. –

+0

Вы не можете использовать массив в качестве цели назначения - 'new_ints = ...' недопустим. – Barmar

ответ

1

Как и Бен сказал, настоятельно рекомендуется использовать вектор, если вы хотите изменить размер массива, чтобы он вписывался в новые элементы.

http://www.cplusplus.com/reference/vector/vector/vector/

Вот мой пример: (обратите внимание, в качестве альтернативы вы можете использовать вектор :: стирания, чтобы стереть ненужные элементы)

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> valid_ints; 
    vector<int> new_ints; 

    int tmp = 2; 

    //read in elements 
    for(int i = 1; i <= 9; i++) 
    { 
    valid_ints.push_back(i); 
    } 
    //valid_ints will hold {1,2,3,4,5,6,7,8,9} 

    for(int i = 0; i < valid_ints.size(); i++) 
    { 
    //We will add an element to new_ints from valid_ints everytime the valid_ints[i] is NOT tmp. (or 2.) 
    if(valid_ints[i] != tmp) 
    { 

     new_ints.push_back(valid_ints[i]); 
    } 
    } 

    //Print out the new ints 
    for(int i = 0; i < new_ints.size(); i++) 
    { 
    cout << new_ints[i] << ' '; 
    } 

    return 0; 
} 

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

{ 1}

{1,3} (skip 2!)

{1,3,4}

{1,3,4,5}

так далее ... до

{1,3,4,5,6,7,8, 9}

Таким образом, результат будет:

1

В c++ размере с array должен быть известен во время компиляции. Т.е. int new_ints[] является незаконным. Вам нужно будет иметь определенный размер, то есть new_ints[10]. (См. here для более подробной информации) Или еще лучше, используйте фантастические преимущества c++ и используйте std::vector.

+0

Он также должен передать размер массива 'stripList', потому что' sizeof (valid_ints) 'будет' sizeof (int *) '. – Barmar

+0

@Barmar Правда, что! –

Смежные вопросы