使用枚举作为索引访问 2D 向量

accessing 2d vector using enums as indices

本文关键字:访问 2D 向量 索引 枚举      更新时间:2023-10-16

我想使用枚举作为索引访问二维向量。然而,这给了我一个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上工作。

似乎尚未初始化rowcol。 如果是这样,那么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;
}

工作示例!