我想使用枚举作为索引来访问二维向量。但是这会给我一个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上工作。
答案 0 :(得分:0)
您似乎尚未初始化 row
或col
。如果是这样,那么p = alpha[row][col];
的行为将未定义。
请注意,可以将row
和col
之外的其他整数值分配给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;
}
答案 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
您也可以直接使用枚举值:
double p = alpha[R0][C2];