2015-04-25 101 views
-2

我有3个数组,每个数组包含5个元素(最大大小为5)。我想要做的是插入一个项目,例如,到第7位。最终的结果是该项目应该放置在索引2的第2个数组中,然后第4个数组创建为1个元素(从第3个数组的最后一个项目开始) 。插入项目到阵列

       result 
array1       array1 
    - item1 (position 0)   - item1 (position 0) 
    - item2 (position 1)   - item2 (position 1) 
    - item3 (position 2)   - item3 (position 2) 
    - item4 (position 3)   - item4 (position 3) 
    - item5 (position 4)   - item5 (position 4) 
array2       array2 
    - item1 (position 5)   - item1 (position 5) 
    - item2 (position 6)   - item2 (position 6) 
    - item3 (position 7)   - item3 (position 7) -> new_item 
    - item4 (position 8)   - item4 (position 8) 
    - item5 (position 9)   - item5 (position 9) 
array3       array3 
    - item1 (position 10)   - item1 (position 10) 
    - item2 (position 11)   - item2 (position 11) 
    - item3 (position 12)   - item3 (position 12) 
    - item4 (position 13)   - item4 (position 13) 
    - item5 (position 14)   - item5 (position 14) 
           array4 
            - item1 (position 15) 

而且,如果想要获取位置12处的项目,则结果应该是array3的item3。

我该如何在C++中做到这一点?

+3

你是否这样做?如果是,为什么? –

+0

您是否愿意使用粗略但有效的解决方案,例如将数组复制到std :: list中,将新元素插入到列表中,然后复制回来? – Beta

+0

您是否有任何关于如何存储这些阵列的偏好,例如作为矢量? – Beta

回答

0

你还没有告诉我们关于真正问题的很多内容,但这里是一般解决方案的概要。要到第13位的访问:

unsigned int n = 13; 

// This is the zero-based index to find the array. 
unsigned int i = n/5; 

// This is the zero-based index of the element within the array. 
unsigned int j = n%5; 

对于插入,此功能将位置K插入项x,并返回的最后一个项目(这已被删除,以腾出空间):

int insert(Item *A, Item x, unsigned int k) 
{ 
    Item ret = A[4]; 

    for(unsigned int j=4; j>k; --j) 
    A[j]=A[j-1]; 
    A[k] = x; 
    return(ret); 
} 

所以如果有3个阵列,在位置7插入一个项x:

Item y; 
y = insert(array2, x, 2); 
y = insert(array3, y, 0); 

现在创建由您喜欢的任何方法的新array4,并设置array4 [0] = Y。