c++ - -1、+1 的所有组合的 vector 的 vector

标签 c++ vector combinatorics

对于任何给定的 n ,我需要创建一个长度为 n 的 vector vector std::vector<std::vector<int>> , 包含 -1所有可能组合和 +1 .例如,对于 n=3我需要

std::vector<std::vector<int>> v = {
  { 1,  1,  1},
  { 1,  1, -1},
  { 1, -1,  1},
  { 1, -1, -1},
  {-1,  1,  1},
  {-1,  1, -1},
  {-1, -1,  1},
  {-1, -1, -1}
};

有什么提示吗?

最佳答案

使用二进制表示并测试位值的简单解决方案。我用了std::bitset尽管您也可以使用简单的 C 风格位操作。

#include <bitset>

int main(){
    int n=3;
    int to = pow(2,n);
    std::vector<std::vector<int>> result;
    for (int i=0; i < to; i++){
        std::bitset<32> b(i);
        std::vector<int> vec1;
        for (int j=0; j < n; j++){
            int value = b.test(j) ? 1 : -1;
            vec1.push_back(value);
        }
        result.push_back(vec1);
    }

    // Printing out result
    for (auto& vec : result){
        for (auto val : vec){
            cout << val;
        }
        cout << endl;
    }
}

Test Example

关于c++ - -1、+1 的所有组合的 vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078685/

相关文章:

c++ - 函数参数的评估顺序

c++ - Clang - 获取 SubstTemplateTypeParm 完整模板信息

C++,使用 vector<int[2]> 我可以 push_back({someNum1,someNum2}) 吗?

c++ - 双 vector 以保存多边形中每一边的距离

php - 获取特定数字的所有变体特定长度和特定最小值和最大值?

c++ - 加载对象 mtl Direct3D 11

c++ - Cuda, device, expression 必须有整型或枚举类型

c++ - 访问作为指向该类的指针 vector 包含的类的方法

c - 在不生成重复项的情况下查找字符串的所有唯一排列

python - 使用 3 个常量查找所有可能的排列