2013-10-10 82 views
1

所以我有一個這樣的數組[1,2,3,4,5,6,7,8,9]這個數組的最大值是15個值。我想要做的是插入一個int,如果我打電話給一個數字索引。所以說我打電話5索引4從那裏一切轉移和新的價值插入[,1,2,3,4,0,5,6,7,8,9]我會怎麼去呢?如何在數組中插入值

我試過這個,但我似乎無法得到它正確它覆蓋了價值。 int xxx;

 cin >> num; 
     if (num >= 0 && num <= 15) { 
      for (int i = num; i < MAX; i++) { 
       values[i] = values[i+1]; 
       cout << values[i+1] << endl; 
      } 
      viewVal(values, position); 
      cout << endl << endl; 
     } 
+2

使用'std :: vector'而不是數組,你可以使用'insert'輕鬆地做到這一點。 – us2012

+0

@ us2012我正在做一本書,所以我必須遵循它所說的。我希望我能做到這一點:( –

+0

爲什麼你必須按照本書所說的話?us2012的評論是你應該做的時候編寫軟件 – dornhege

回答

1

更改普通數組的大小在C++中是不可能的。我可以建議使用std::list,它支持定時插入。

#include <iostream> 
#include <list> 
#include <algorithm> 

int main() 
{ 
    std::list<int> l{1, 2, 3, 4, 5, 6, 7, 8, 9}; 

    int n; 
    std::cin >> n; 

    auto it = std::find(l.begin(), l.end(), n); 

    if(it != l.end()) 
    { 
     l.insert(it, 0); 
     for(const auto& elem: l) 
     { 
      std::cout << elem << ' '; 
     } 
     std::cout << std::endl; 
    } 
    else 
    { 
     std::cout << "No such element" << std::endl; 
    } 

    return 0; 
} 
+1

'std :: vector'在這種情況下會更快,關於唯一的時間'std :: list'是合適的,當你需要能夠插入和擦除而不會使迭代器失效時 –

+0

@soon如果只有數組有3個值,最多20個不能移動它,然後添加我的新值? –

+0

@ Mr.1.0,當然可以,但是如果你想添加超過17個元素,你必須增加大小(重新分配內存)of array。 – soon

5

的問題是,values[i] = values[i+1];將一個數值一步向左(索引4現在具有指數6的值),但要調換所有值中的一個步驟到右側。因此,你必須改變分配。

這會產生一個問題,即一旦將值移至右側,右邊位置的上一個值就會丟失。爲了防止這種情況,你可以從數組的後面開始。

+0

你能告訴我一個例子嗎? –

+0

我故意沒有顯示任何代碼,因爲顯然你正在試圖學習C++,給你的代碼不會有幫助。 g可以將所有值向右移一步的功能。然後,您可以更新該功能以僅移動數組的後綴。嘗試實施小步驟。 –

1

希望這會有所幫助,在這裏所有的元素都先移到右邊,然後將新的數字插入到數組中。

for(int i=(num-1);i<MAX;i++) 
{ 
int temp=values[i]; 
values[i+1]=temp; 
} 
values[num-1]=0; 
+0

不起作用。輸入索引,然後把其他所有東西都轉換成相同的數字 –

+0

抱歉,我的初始值是num,這是它失敗的原因...我用(num-1)替換了它,這將工作 – Amith