int h, w;
cin>>h>>w;
int a[h + 1][w + 1], f[h + 1][w + 1];我是否应该使用这种类型的声明来降低空间复杂性,而不是在获取实际请求的大小之前声明数组?
发布于 2017-08-12 13:06:19
这些都是一些编译器支持的非标准扩展。不要指望他们。最好使用std::vector。
int h, w;
cin >> h >> w;
std::vector<std::vector<int>> a{h + 1, std::vector<int>{w + 1}};
std::vector<std::vector<int>> f{h + 1, std::vector<int>{w + 1}};发布于 2017-08-12 13:45:53
c99中允许使用Variable-length automatic arrays,但c++中不允许。作为一个扩展,GCC接受它们,但是如果你用-std=c++14和-pedantic构建以下示例,你会得到警告:
void foo(int n) {
int bar[n];
}警告: ISO C++禁止可变长度数组‘’-Wvla
我不推荐使用它,c++有自己的动态数组类型,称为std::vector。
另一个answer展示了一个很好的示例,它使用值为std::vector<int>(w + 1)的元素的h + 1副本来构造std::vector,这是另一个带有std::vector的w + 1 default-inserted实例的int。
发布于 2017-08-12 19:10:38
现代C++不允许在运行时确定数组的大小。正如其他答案所指定的那样,c99允许这样做。最好的方法是使用向量。
例如,尝试在Microsoft Visual Studio中编译此代码,看看会发生什么。
#include <iostream>
using namespace std;
int main()
{
int size;
cin >> size;
int arr[size]; // 8th line
}错误:
source_file.cpp(8): error C2131: expression did not evaluate to a constant
source_file.cpp(8): note: failure was caused by non-constant arguments or reference to a non-constant symbol
source_file.cpp(8): note: see usage of 'num'
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64你应该使用的是向量。向量做的是,它决定了运行时的大小。你可以把更多的元素放进去,它会变得更大。你可以随时随地删除更多的元素,然后它的大小就会变小。
但是要小心,不要把容量和大小混为一谈。下面是一个示例代码,让您了解容量是如何工作的。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
cout << "Adding elements!" << endl;
for(int i = 0; i < 10; i++)
{
v.push_back(6);
cout << "Capacity: " << v.capacity() << endl;
}
cout << "Removing elements!" << endl;
for(int i = 0; i < 10; i++)
{
v.pop_back();
cout << "Capacity: " << v.capacity() << endl;
}
}Linux x64输出:
Adding elements!
Capacity: 1
Capacity: 2
Capacity: 4
Capacity: 4
Capacity: 8
Capacity: 8
Capacity: 8
Capacity: 8
Capacity: 16
Capacity: 16
Removing elements!
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16
Capacity: 16即使我稍后删除这些元素,容量仍将保持其最后一个值。
Capacity返回当前为向量分配的存储空间的大小,以元素表示。
Size返回向量中元素的数量。
祝你玩得开心,祝你好运!
编辑:还可以根据操作系统的不同更改容量。
微软x64输出:
Adding elements!
Capacity: 1
Capacity: 2
Capacity: 3
Capacity: 4
Capacity: 6
Capacity: 6
Capacity: 9
Capacity: 9
Capacity: 9
Capacity: 13
Removing elements!
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13
Capacity: 13https://stackoverflow.com/questions/45646689
复制相似问题