2011-05-07 36 views
0

我有兩個問題:如何使用矢量打印數值,以及如何將數值添加到數組的末尾?

1-如何打印下面所述代碼的值?

#include <iostream> 
#include <list> 
using namespace std; 

int main() 
{ 
    int i; 
    list<int> a; 

    for(i; i<5; i++) 
    { 
     a.push_back(i); 
    } 


    system("pause"); 
    return 0; 
} 

2-如何將新元素添加到整數數組?例如,我有一個數組這樣的:

int *a; 
int size = 3 
a = new int [size]; 

a[0]=0; 
a[1]=1; 
a[2]=2; 

//Now, I would like to add a new element to my array by increasing its size by one 

size += size; // new size is 4 

我如何使用我的數組新的大小,並添加了新的元素添加到數組的結束?

回答

1
  1. 您應該在for()循環中將i初始化爲0。
    要打印這些值,您必須爲()循環創建另一個值,但不要將元素添加到列表中,而是將它們打印到cout。

    爲(...)
    {
    //打印來清點
    }

  2. INT * B =新INT [大小+ 1];
    您應該使用memcpy()將a複製到b中,然後將最後一個元素添加到b中。
    最後你應該爲a和b調用delete。

+0

但是,請記住,'memcpy'只能在[POD類型]使用(http://stackoverflow.com/questions/146452/what-are-pod-types-in-c)。 – 2011-05-08 01:33:30

2

(1)

list<int>::const_iterator it; 

for (it = a.begin(); it != a.end(); ++it) 
    cout << *it << endl; 

(2)創建新的[]一個第二陣列和複製在第一。請記得刪除[]原件。或者,更好的是,擺脫數組並使用一個向量,然後推回新的元素。矢量自動調整大小。

+0

+1正確的方式來通過一個std容器 – Chad 2011-05-08 00:34:45

+0

@Chad迭代:其實* *正確的方式在這裏會一直使用'const_iterator'而不是'iterator',和前綴增量,而不是後綴。 ; - ] – ildjarn 2011-05-08 00:45:55

+0

@ildjarn - 確實如此,但我認爲這些微妙之處在這個層面上是失敗的。無論如何,我會改變的。 – Duck 2011-05-08 01:00:49

1

。不想std算法來手工編碼for循環:

std::copy(list.begin(), list.end(), 
    std::ostream_iterator<int>(std::cout, "\n")); 

如果手工編碼循環仍是正確的選擇,考慮Boost.Foreach

BOOST_FOREACH(int i, list) { 
    std::cout << i << "\n"; 
} 

這是一個原因,你應該使用而不是指針和數組。讓其他人調試硬代碼。

int* newa = new int[newsize]; 
std::copy(a, a+std::min(newsize, size), newa); 
delete[] a; 
a = newa; 
size = newsize; 

但是,此代碼是否保留了額外的項目已初始化或未初始化?此代碼提供什麼樣的例外保證?最好完全跳過new,只聲明一個std::vector

相關問題