vector <string*>让我困惑

Dom*_*nix 0 c++ stl

说我需要在我的向量中存储长字符串.我可以将它声明为矢量.然而,更好的方法是存储指向这些字符串的指针,而不是实际的字符串.

所以,我的声明应该像vector一样,我只需要做类似的事情:

LOOP
//Accept String from a file in myString
vector<string *> v1;
string * sample = &myString;
v1.push_back(sample);
END LOOP
Run Code Online (Sandbox Code Playgroud)

这是否合适或存在更好的方法来实现这一目标?我甚至可能完全错了.

Cha*_*had 9

没有理由存储指向字符串的指针. std::string无论如何都会将堆分配的内存用于"长"字符串,所以通过在容器中存储指针来获得唯一的好处就是自己管理内存的头痛.

另一方面,如果您需要多个位置的那些长字符串的副本,您可以保持向量中的字符串的共享指针:

std::vector<std::shared_ptr<std::string>>;
Run Code Online (Sandbox Code Playgroud)