【发布时间】:2020-12-22 23:34:15
【问题描述】:
考虑到向量包含的所有向量都是空的,空间复杂度是 O(n) 还是 O(1)?
vector<vector<int>> mat(n);
【问题讨论】:
-
我不认为标准禁止实现让空向量预分配块
-
我认为标准要求默认构造函数为 noexcept,这(通常)排除了分配。
-
@MarshallClow - 它不排除分配,但它确实塑造/限制了分配失败时会发生什么。如果分配失败,则调用
std::abort()从技术上讲,允许函数为noexcept。此外,相当多的操作系统会进行惰性分配 - 代码可能会请求分配,系统实际上并没有执行分配,一些后续代码尝试使用分配的内存,然后系统承诺执行分配,分配失败,然后才可能抛出异常。这种类型的惰性分配在实践中确实会发生。 -
技术上正确,是的,但这对图书馆的用户没有用。
标签: c++ c++-standard-library space-complexity