使用枚举作为索引访问 2D 向量
accessing 2d vector using enums as indices
我想使用枚举作为索引访问二维向量。然而,这给了我一个EXC_BAD_ACCESS
错误。我创建了枚举如下 -
enum ROW
{
R0 = 0,
R1 = 1,
};
ROW row;
enum COLUMN
{
C1 = 0,
C2 = 1,
};
COLUMN col;
二维矢量是这样创建的 -
std::vector<std::vector<double>> alpha{ { 1.46774172175387E-005, 2.000064981},
{ 3.46774172175387E-005, 4.59485786231327E-005} };
当我尝试访问这样的元素时出现错误 -
p = alpha[row][col];
有人可以指出我在这里做错了什么吗?
我在Xcode 6.1,OS X Yosemite上工作。
您
似乎尚未初始化row
或col
。 如果是这样,那么p = alpha[row][col];
的行为将是不确定的。
请注意,可以将其他整数值分配给 row
,并且col
超出enum
中明确指定的整数值。因此,您的方法不一定会阻止数组边界之外的访问尝试。
C++11 引入了具有更严格规则的枚举器类。
您应该初始化枚举变量,请参阅以下示例:
#include <iostream>
#include <vector>
using namespace std;
enum ROW
{
R0 = 0,
R1 = 1,
};
enum COLUMN
{
C1 = 0,
C2 = 1,
};
int main() {
// your code goes here
std::vector<std::vector<double>> alpha { { 1.46774172175387E-005, 2.000064981},
{ 3.46774172175387E-005, 4.59485786231327E-005} };
ROW row = R0;
COLUMN column = C2;
double p = alpha[row][column];
std::cout << p << std::endl;
return 0;
}
输出:
2.00006
工作示例:http://ideone.com/dIRYoh
您也可以直接使用枚举值:
double p = alpha[R0][C2];
您可以像这样直接访问枚举,例如:
#include <iostream>
#include <cstdlib>
#include <vector>
enum ROW
{
R0 = 0,
R1 = 1
};
enum COLUMN
{
C1 = 0,
C2 = 1
};
int main()
{
std::vector<std::vector<double>> alpha{ { 1.46774172175387E-005, 2.000064981},
{ 3.46774172175387E-005, 4.59485786231327E-005} };
// Either like this:
std::cout << alpha[ROW::R0][COLUMN::C1];
// Or simply like this:
std::cout << alpha[R0][C1];
return 0;
}
工作示例!
相关文章:
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 分配/访问2d阵列,使得2d子块是连续的
- 创建 2D 数组类:如何访问 2D 数组类(如 array[x][y))中的元素
- 有没有办法使用初始化到第一行的指针访问 2d 数组的第二行?
- 快速访问2D矩阵中的单元格
- X86 MASM-通过并访问2D阵列
- 在 c++ 中使用指针访问 2d 数组,如何将地址分配给指针
- 访问2D向量阵列中的元素
- 使用枚举作为索引访问 2D 向量
- 访问 2D 动态数组的元素 - c++
- 访问 2D 数组时的读取冲突
- 循环访问 2D 矢量以从内存中删除对象
- 使用1D迭代访问2D阵列
- 访问2D结构时程序崩溃
- 内置类型的运算符重载C++以访问 2D 数组中的元素
- 不能访问2d对象指针数组的类成员(类型***)
- 访问2D向量的指针
- 我被使用指针访问 2D 数组中的值的代码所困扰
- c++访问2D数组指针上的值
- 访问2D矢量时出现分段错误