如何初始化 int *const *const.
How to initialize int *const *const?
我需要一个具有固定宽度和高度的 2d 数组,它只能更改存储在其中的各个值。它在标头中声明,稍后在源文件中初始化。
我的发现使我尝试了以下片段;不幸的是,问题是关于1d或非常量数组的,与我的情况不匹配。
int *const *const a = new int[10][10];
int *const *const b = new int[10][10]();
int *const *const c = new int*[10];
for (int i = 0; i < 10; ++i) {
c[i] = new int[10];
}
我的希望是在最后一个示例中,但是如果 c
的"内部"数组没有初始化并且由于它们是 const 而无法初始化它们,我如何使用它们?
此数组不需要其他类型吗?我在想int d[][]
但它没有恒定的宽度和高度。
在我看来,这是一个悖论(如果它存在于 c++ 世界中),我错过了什么吗?
我在考虑
int d[][]
但它没有恒定的宽度和高度。
int d[][]
没有意义(并且将被编译器拒绝)。就多维数组而言,只能省略第一维的大小来表示不完整的类型。其他维度的大小是类型的一部分。你不能省略它们,就像你不能省略int
一样。
换句话说,如果你有类似 int d[5][10]
的东西,那么你可以把它看作是元素类型 int[10]
的一维数组。通常,将多维数组视为一维数组的特例。这将使一切更容易理解。
在 C++ 中解决问题的最佳解决方案是创建一个包含私有std::array<T, Width * Height> data;
的类,并在内部int width
成员变量,并计算公共成员函数中各个 x 和 y 参数的数组偏移量,例如:
T& operator()(int x, int y)
{
return data[y * width + x];
}
如果尺寸仅在运行时已知,那么您唯一需要更改的是使用 std::vector
而不是 std::array
.存储仍将是连续的。
下面是一个完整的示例:
#include <vector>
#include <iostream>
class Matrix
{
public:
Matrix(int width, int height, int value) :
width(width),
data(width * height, value)
{}
int& operator()(int x, int y)
{
return data[y * width + x];
}
private:
int width;
std::vector<int> data;
};
int main()
{
Matrix m(5, 10, 123);
std::cout << m(7, 8) << "n";
m(7, 8) = 124;
std::cout << m(7, 8) << "n";
}
我的希望是在最后一个示例中,但是如果 c 的"内部"数组未初始化并且由于它们是 const 而无法初始化它们,我如何使用它们?
这根本不是真的:
int * const * const c = new int*[10]
{
new int[10], new int[10], new int[10], new int[10], new int[10],
new int[10], new int[10], new int[10], new int[10], new int[10]
};
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 在类 (C++) 之外设置 const int 成员变量
- C++ 无法从 const int* 转换为 const_iterator
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?
- C++如何将 std::vector 转换为 const<int> std::vector<const int>?
- 如何在字符串向量中指向const int
- 如何在 std::map<const int、int> C++ 中重载插入运算符>>?
- 为什么允许 int 和 const int 使用不同的转换函数?
- 如何通过头文件中的函数初始化 const int 数组?
- 为什么 const int 适用于字符大括号初始化?
- 不同类型的"decltype((const int)a)"和"decltype((cons
- 为什么我不能使用与"常量字符*"相同的"const int*"创建一个 int 数组?
- Const Int 宣布与 stoi 不被视为 const
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 杀死幻数:"const int" vs "constexpr int"(或者最后没有区别)
- 作为返回类型"const int&"做什么?
- 将const int std ::数组的n元素复制到int矢量中.怎么做
- 尝试使用 const int std::array 时出错
- 构造函数中没有从 'const int [5][4]' 到 'const int **' 的已知转换