std :: vector中的std :: string?

时间:2012-09-06 11:36:45

标签: c++ stdvector stdstring dynamic-allocation

如果内部向量是重新设置的,我std::vector内的std::vector已经遇到了一些问题。我想知道std::vector<std::string>是否完全安全(因为内部字符串可以重新设置)或std::vector<std::string*>更好?

2 个答案:

答案 0 :(得分:3)

这个问题很可能是误解的后果,它看起来与数组相同。

数组必须包含相同类型和静态大小的元素,因为向量可以调整大小,但静态sizeof(vector<X>)不依赖于它的运行时大小。 vector<vector<X> >内部只包含指向动态分配的vector<X>数组的指针(加上一些其他描述性数据),每个数组都包含指向其自身动态分配的X数组的指针。

这些数组实际上是由相同大小的相同元素组成的。

答案 1 :(得分:1)

放置符合标准类型要求的vector任何类型都是完全安全的。这些要求在界面上严格规定,基本上总结为“可移动”。由于std::string是可移动的,因此可以将其放置在vector中。它可能动态分配其他内存这一事实无关紧要。