雖然在一些遺留代碼項目的工作,我發現這個功能:初始化的std ::矢量:: string的
std::vector<std::string> Object::getTypes(){
static std::string types [] = {"type1","type2", "type3"};
return std::vector<std::string> (types , types +2);
}
我可能會寫這爲:
std::vector<std::string> Object::getTypes(){
std::vector<std::string> types;
types.push_back("type1");
types.push_back("type2");
types.push_back("type3");
return types;
}
是這只是一種風格選擇,還是我缺少的東西?任何幫助將不勝感激。對不起,如果這太基本了。
更新: 重寫同樣的方法居然發現不同類別做一個或其他方式,所以它更曖昧。我會讓他們都一樣,但寧願更好的方法,如果有的話。
編輯
請注意,上述的傳統代碼不正確,因爲它初始化只在陣列的前兩個元素的向量。但是,這個錯誤已經在評論中討論過了,因此應該保留。
正確的初始化應如下:
...
return std::vector<std::string> (types, types + 3);
...
第一個咒語原則上可以更高效,因爲它不涉及任何記憶重新分配。函數調用也較少。注意在C++ 11中,你可以說'return std :: vector {「type1」,「type2」,「type3」};'。 –
juanchopanza
@juanchopanza另外,在該版本中,代碼和數據的隔離更加明顯,因此它在語法上更清晰。 – 2013-12-17 12:45:17
糾正我以前的評論:在C++ 11中,你可以用較少的詞來實現它:'return {「type1」,「type2」,「type3」};'。 – juanchopanza