2015-09-30 31 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

就像Ben說的那樣,如果您想調整陣列大小以適應新元素,強烈建議使用矢量。

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沒錯! –