[英]vector<string> or vector<shared_ptr<string>> in c++ 14
在舊的c ++樣式中,我總是使用vector < shared_ptr < string> >
或vector < string* >
來避免在構造包含許多string
對象的大vector
時進行內存復制。
從c ++ 11開始,c ++具有rvalue
和move
語義; 我現在可以使用vector < string >
嗎?
我使用gcc 7.1.0和clang 3.6與c ++ 14選項。
在以下幾種情況下,使用vector<shared_ptr<string>>
或vector<string*>
可以幫助在C ++ 11之前優化性能:
std::string
具有非拋出移動構造函數,因此對於std::vector<string>
push_back()應該std::vector<std::shared_ptr<string>>
慢。 std::vector<string>
也是合適的。 如果你的目的是返回集合的副本而不是復制元素 - 這是std::vector<shared_ptr<string>>
仍然std::vector<shared_ptr<string>>
的唯一方法。 但在這種情況下,我的建議是在集合之間共享不可變對象,即使用std::vector<shared_ptr<const string>>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.