2016-11-23 81 views
-4

比方說,我有這樣的數組:C++迭代

int oldv[10] = {16, 12, 24, 96, 45, 22, 18, 63, 47, 56}; 

,另一種像

int newv[8]; 

,我想從直到的old交替兩端填寫新某些條件滿足,我會有:

newv = [16, 56, 12, 47, 24, 63 ...] 

比方說,我想只把新的3個號碼取自舊的(即:16,56,12)。 我已經嘗試用下面的循環,但當然是不夠的...

for(int i = 0; i < 3; i++) 
    newv[i] = oldv[i*(sizeof(oldv)-1)]; 

任何幫助嗎?

+5

'new'是C++中的關鍵字。你是如何得到這個代碼來編譯的? –

+0

@ tobi303:我剛剛編輯了這個問題,希望能夠更清楚一點。 –

+0

@MartinBonner對,謝謝 – user463035818

回答

-1
int _old[10] = {16, 12, 24, 96, 45, 22, 18, 63, 47, 56}; 
int _new[8]; 

const int old_size = sizeof(_old)/sizeof(int); 
const int new_size = sizeof(_new)/sizeof(int); 

for (int i = 0; i < new_size; ++i) 
{ 
    if (i % 2) 
     _new[i] = _old[old_size - i/2 - 1]; 
    else 
     _new[i] = _old[i/2]; 

    std::cout << _new[i] << " "; 
} 

std::cout << std::endl; 

返回16 56 12 47 24 63 96 18

See it live

+0

數組上的'sizeof'總是很棘手。 –

+0

@NickyC邏輯看起來不對。但我不明白sizeof數組有什麼問題。 – MayurK

+0

@static_cats if(1%2 == 1)case,you have to do _new [i] = _old [sizeof(_old)/ sizeof(_old [0]) - (i + 1)/ 2]; – MayurK

-2

享受。

#include <algorithm> 
#include <iostream> 
#include <iterator> 

using namespace std; 

int main(int, char**) 
{ 
    int oldv[] = { 16, 12, 24, 96, 45, 22, 18, 63, 47, 56 }; 
    int newv[8]; 
    size_t numbers_i_want = 3; 

    size_t oldv_b = 0; 
    size_t oldv_e = sizeof oldv/sizeof *oldv; 
    size_t newv_e = sizeof newv/sizeof *newv; 

    for(size_t i = 0; 
     i != min(numbers_i_want, newv_e) && oldv_b != oldv_e; 
     ++i) 
    { 
     newv[i] = (i % 2) ? oldv[--oldv_e] : oldv[oldv_b++]; 
    } 

    copy(newv, newv + min(numbers_i_want, newv_e), 
     ostream_iterator<decltype(*newv)>(cout, " ")); 
    return 0; 
}