C ++-将#defined整数列表解压缩为

时间:2019-05-21 19:46:32

标签: c++

我有以下代码:

#define ROTATIONS 135, 270, 0,0 , 315, 135

    std::vector<float_t> rotations_vector;
    for (int i = 0; i < 6; i++){
        rotations_vector.push_back(ROTATIONS[i]);
    }

如您所见,我想将此DEFINED整数序列卸载到向量中。但是,ROTATIONS不能像数组一样被索引。

不能更改ROTATIONS的定义。我必须将其解压缩到一个向量中。

3 个答案:

答案 0 :(得分:2)

只需将宏放在初始化列表中即可。

#include <iostream>
#include <vector>

#define ROTATIONS 135, 270, 0,0 , 315, 135

int main(){
    std::vector<float> rotations_vector = {ROTATIONS};

    for (const auto& r : rotations_vector){
        std::cout << r << ' ';
    }
}

std::vector<float> rotations_vector = {ROTATIONS};行将扩展为std::vector<float> rotations_vector = {135, 270, 0,0 , 315, 135};

输出:

  

135 270 0 0 315 135

答案 1 :(得分:2)

出于对Bjarne的热爱,请勿这样做。有可能,但这也是使代码不可读的好方法。

要回答这个问题,您必须使用带有这些值的向量进行初始化,而不是复制(假设您使用的是C ++ 11):

std::vector<float> rotations_vector = {ROTATIONS};

或者在C ++ 11之前,您可以创建临时数组并从中复制:

float array[] = {ROTATIONS};
std::vector<float> rotations_vector(array, array + (sizeof(array)/sizeof(array[0])));

答案 2 :(得分:1)

使用构造函数获取整数列表:

#include <vector>
#include <iostream>

#define ROTATIONS 135, 270, 0,0 , 315, 135

int main() {
    std::vector<float> rotations_vector{ ROTATIONS };
    for (const auto& r : rotations_vector) std::cout << r << " ";

}