2014-02-08 56 views
0

我想要在C++向量中獲取最後一個定義的元素,但vector :: capacity和vector :: size只是給我最大的大小。例如:在向量C++中查找最後定義的元素

int main() { 
    char* array = new char[MAX_SIZE]; //MAX_SIZE is a const int equaling 100 
    std::cout << "Enter in a number: "; 
    std::cin >> array; 
    std::vector<char> cVector; 
    cVector.reserve(MAX_SIZE); 
    cVector.assign(array, array + MAX_SIZE); 
    for (std::vector<char>::const_iterator i = cVector.begin(); i != cVector.end(); ++i) 
    { 
      std::cout << *i; 
    } 
    std::cout << std::endl; 
    std::cout << "Size: " << cVector.size() << std::endl; 
    std::cout << "Actual size: " << cVector.capacity() << std::endl; 
} 

樣本輸出:

Enter in a number: 55 
55 
Size: 100 
Actual size: 100 [Should say 2] 

我使用矢量::結束()和類似的方法試過了,但是沒有辦法,我拿到的最後一個元素的索引。

+0

代碼完成應該做的事情。你最後定義的元素是什麼意思?你構造'cVector'的大小爲MAX_SIZE。爲什麼你不使用'std :: string'? –

+0

我的歉意。我最初使用了一個動態數組,並在那裏定義了它,但後來更改爲普通數組。我現在要修復它。 – user3288091

+1

爲什麼實際尺寸要說2? – smac89

回答

2

當您撥打reserve(MAX_SIZE)時,您將更改容量,因此輸出100應該是。在那個循環中你打印出來的值實際上迭代了100次,但所有其餘的字符都是\0,所以std::cout將這些指針解釋爲空字符串。這裏有一個稍微修改過的版本,可以創建一個合適的矢量,所以vector.back()將指向最後一個元素,並且vector.end()指向內存中的下一個位置。

int main() { 
    std::string s; 
    std::cout << "Enter in a number: "; 
    std::cin >> s; 
    std::vector<char> cVector; 
    cVector.reserve(MAX_SIZE); 
    cVector.assign(&s[0], &s[0]+s.size()); 
    for (std::vector<char>::const_iterator i = cVector.begin(); 
     i != cVector.end(); ++i) 
    { 
     std::cout << *i; 
    } 
    std::cout << std::endl; 
    std::cout << "Size: " << cVector.size() << std::endl; 
    std::cout << "Actual size: " << cVector.capacity() << std::endl; 
} 

UPDATE:請注意,我用std::string只能使其更加C++ - ISH。您可以繼續使用char[],只需要將您的原始作業替換爲:

cVector.assign(array, array + strlen(array)); 
+0

這是完美的!非常感謝!奇怪的是用char數組填充矢量不行,但用字符串做。 – user3288091

+0

@ user3288091對此感到抱歉。這也適用於'char []',請參閱更新。 – bereal

1

size()給出了矢量的長度(實際在其中的元素的數量,而不是它當前可以適應的元素的數量)。您看到相同的號碼,因爲您在矢量上調用assign(array, array + MAX_SIZE),這顯然會填充MAX_SIZE元素。

+0

有沒有更好的方法給我添加數組的內容到矢量? – user3288091

+0

如果你使用'string'代替,這整個代碼只有5行。如果您堅持使用數組,請將char MAX中的「MAX_SIZE」替換爲char數組中「string」的長度。 – Thomas

+0

的確,我想這是最好的情況。感謝您的幫助。 – user3288091