拥有std::array
动态对象(例如std::array<std::string, 3>
)以及调整内容(字符串)的大小是否安全? (因为有一个原始C字符串数组可能会有问题)
答案 0 :(得分:6)
是的,因为std::array
只是一个包含底层C样式aray数组的友好模板。你可以把它想象成这样:
template <typename T, int size>
class Array {
...
T vals[size];
}
将T更改为上面的字符串,您将很快意识到您可以对字符串数组的内容执行任何操作,您可以使用std::array
字符串。这包括调整大小,删除,无论你能想象到什么。
为了更深入地思考它,请以这种方式思考。 std::array
包含一个字符串。字符串不知道它被保持在哪里。当数组本身被分配时,数组可能会告诉字符串自己复制(通过复制构造函数或赋值)。但是,这完全是通过字符串的公共接口完成的。字符串由任何数据结构保存的事实并不限制该字符串的功能,它只是使持有者(在本例中为std::array
)成为string
的公共接口的另一个客户端。
由于std::array
之类的容器需要处理各种类型的容器,因此它们往往会对传入的类型T
进行相对较少的通常记录良好的假设。就像要求T可以复制一样构造,默认构造和分配。然后通常由T
的实施者*来确保这些假设是有效的。
*有一个非常高级的主题叫做模板专业化,人们可以只为“string”编写一个专门版本的数组。除vector<bool>
之外,这些标准容器非常罕见。 子>
答案 1 :(得分:1)
假设你的意思是调整字符串的大小,那就是。