標籤:
在編寫代碼時發現vector的一個現象
(1)
std::vector<std::string> str_vector;
str_vector.resize(3);
str_vector.push_back("name_1");
str_vector.push_back("name_2");
然後進行訪問逐一列印發現:
for (std::vector<std::string>::iterator iter = str_vector.begin(); iter != str_vector.end(); ++iter)
{
std::cout<<*iter<<", ";
}
其值為:"","","","name_1","name_2",
此時發現resize是開闢了三個string空間,而後push_back是接著前面開闢的空間而往裡push.
(2)
std::vector<std::string> str_vector;
str_vector.push_back("name_1");
str_vector.push_back("name_2");
其值為:"name_1","name_2",
(3)
std::vector<std::string> str_vector;
str_vector[0] = "name_1"; //wrong,錯誤,vector大小未知,且沒有元素.
// 下標只能用於擷取已存在的元素
總結:
(1) 若想對vector進行下面訪問,則必須空間已開闢,可以用:
std::vector<std::string> str_vector;
str_vector.resize(3);
str_vector[0] = "name_1";
str_vector[1] = "name_2";
str_vector[2] = "name_3";
也可用:
std::vector<std::string> str_vector;
str_vector.push_back("name_1");
str_vector.push_back("name_2");
for(int i=0; i< str_vector.size(); i++)
{
std::cout<<str_vector[i]<<std::endl;
}
(2) 請注意resize()與push_back的同時使用,其空間是resize的空間+push_back的空間,否則達不到預設目標.
C++ vector的訪問(resize,pu_back與下標訪問的區別)