vector <string * =“”>让我困惑</string>

时间:2012-08-02 14:33:25

标签: c++ stl

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

我的声明应该像vector&amp ;;我只是做了类似的事情:

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

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

2 个答案:

答案 0 :(得分:9)

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

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

std::vector<std::shared_ptr<std::string>>;

答案 1 :(得分:4)

  

然而,更好的方法是存储指向这些字符串的指针,而不是实际的字符串。

我真的很怀疑。除非您有充分的理由使用指针,否则请使用std::vector<std::string>