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

时间:2015-04-16 07:17:45

标签: c++ vector enums

我想使用枚举作为索引来访问二维向量。但是这会给我一个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上工作。

3 个答案:

答案 0 :(得分:0)

您似乎尚未初始化 rowcol。如果是这样,那么p = alpha[row][col];的行为将未定义

请注意,可以将rowcol之外的其他整数值分配给enum中明确指定的值。因此,您的方法不一定会阻止数组边界之外的访问尝试。

C ++ 11引入了具有更严格规则的枚举器类。

答案 1 :(得分:0)

您可以像这样直接访问枚举:

#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;
}

Working example!

答案 2 :(得分:0)

您应该初始化枚举变量,请参阅以下示例:

#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];