請參考代碼和註釋如下:在C++矢量分配元素後聲明
vector<int> v1(10);
cin>>v1[0]; // allowed
cin>>v1[1]; // allowed
// now I want v1 to hold 20 elements so the following is possible:
cin>>v1[15]>>v[19]; // how to resize the v1 so index 10 to 19 is available.
請參考代碼和註釋如下:在C++矢量分配元素後聲明
vector<int> v1(10);
cin>>v1[0]; // allowed
cin>>v1[1]; // allowed
// now I want v1 to hold 20 elements so the following is possible:
cin>>v1[15]>>v[19]; // how to resize the v1 so index 10 to 19 is available.
您只需加入新值之前調整向量:
v1.resize(20);
你可以使用resize像這樣:
v1.resize(20);
vector :: resize()將調整它的大小,並用缺省缺點填充它(int,在這種情況下,所以沒關係)。
vector :: reserve()將分配空間,但不填充它。
您可以使用例如push_back()添加其他項目,直到它具有您想要的許多項目 - 它會根據需要調整自身大小。
它確實很重要。因爲它使用'x()'(在人們抱怨之前(概念上講,確切的細節稍微複雜一些))初始化新成員的方法,而INT是一個POD。 POD值是初始化的值,因此成員設置爲0. – 2011-05-07 17:38:45
請注意,'reserve'不會增加大小,只會增加容量。因此,在OP的情況下,在保留(20)後不能訪問元素15和19。你需要爲此調整大小。 – 2011-05-07 17:39:48
@Martin:理所當然 - 但我的意思是它不是一個涉及到的,耗時的構造函數 - 或者是你可以控制的構造函數。 – jwismar 2011-05-07 17:44:44
如果你想從cin
儘量多值可用,您可以使用一個istream_iterator
迭代器區間,並傳遞到vector
範圍構造函數,像這樣:
#include <iterator> // for istream_iterator
#include <vector>
#include <iostream> // for cin
// ...
std::vector<int> v1((std::istream_iterator<int>(std::cin)), // extra()
std::istream_iterator<int>());
(額外的括號要求防止"C++ most vexing parse")。參看也Constructing a vector with istream_iterators。
儘管這不完全是我想要的,但是它的一個有用的特徵就是它的一致性。在很多情況下,我們要做的第一件事就是在聲明之後將輸入輸入到向量中。 – 2011-05-08 06:03:14
調整大小後,我可以使用cin輸入而不需要push_back? – 2011-05-07 17:37:16
@Gunner:'vector v1(10);'實際上與'vector v1; v1.resize(20);'。這就是說,你對'push_back'有什麼反應(或者,你對'reserve'和'push_back'有什麼反應?) –
2011-05-07 17:45:57
@James:沒有什麼反對這些,但情況是這樣的,我想輸入直接進入向量而不是臨時變量。最後,兩者都是一樣的,但想知道是否有其他選擇。 – 2011-05-08 06:04:58