C++ 向量的向量的位运算 问题描述
你好,我正在写一个我做的解决问题的老程序。 作为解决这个问题的一部分,我(为一些行)生成了一个数组,其中包含了所有可能的方法来拟合这些数字 我想创建一段代码,它将合并所有可能的位置 这意味着,例如,在伪代码中:C++ 向量的向量的位运算 问题描述,c++,bit-manipulation,bitwise-operators,C++,Bit Manipulation,Bitwise Operators,你好,我正在写一个我做的解决问题的老程序。 作为解决这个问题的一部分,我(为一些行)生成了一个数组,其中包含了所有可能的方法来拟合这些数字 我想创建一段代码,它将合并所有可能的位置 这意味着,例如,在伪代码中: [[0, 0, 1], [1, 0, 1], [0, 1, 1]] OR - [1, 1, 1] AND - [0, 0, 1] 这两个操作的结果将让我确切地知道我们在哪里有一个固定值。 [?,?,1] 假设 >P>该解决方案在C++中是需要的。 放置位置存储在向量中 所有
[[0, 0, 1],
[1, 0, 1],
[0, 1, 1]]
OR - [1, 1, 1]
AND - [0, 0, 1]
这两个操作的结果将让我确切地知道我们在哪里有一个固定值。
[?,?,1]
假设
- 放置位置存储在
向量中
- 所有内部
向量的大小都相同
- 执行哪种位操作无关紧要,只是它可以应用于所有向量
提前感谢您的帮助者和评论员。这是否回答了您的问题?请发布您迄今为止尝试过的内容,否则很可能由于缺少实际代码而关闭。@KenY-N,这并不能回答我的问题,因为它不是单独在向量上,而是在每个索引的所有向量上。您的代码中有一个输入错误。打印出
merged\u和
,而不是merged\u或
。如果编辑,它会给出正确的结果。因为我们有一个工作示例,所以我认为这现在是一个问题。据我所知,std::vector
相当慢,因此在那里发布的帖子可能会建议如何有效地使用boost::dynamic_bitset
。
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<vector<bool>> options =
{{false, false, true},
{true, false, true},
{false, true, true}};
vector<bool> merge_and, merge_or;
bool flag;
int i, j;
for (i = 0; i < options.size(); i++) {
for (j = 0; j < options[0].size(); j++) cout << options[i][j];
cout << endl;
}
cout << endl;
for (i = 0; i < options[0].size(); i++) {
flag = options[0][i];
for (j = 1; j < options.size(); j++) {
flag = flag & options[j][i];
}
merge_and.push_back(flag);
}
for (i = 0; i < options[0].size(); i++) {
flag = options[0][i];
for (j = 1; j < options.size(); j++) {
flag = flag | options[j][i];
}
merge_or.push_back(flag);
}
cout << "AND ";
for (const auto &i : merge_and) cout << i;
cout << endl;
cout << "OR ";
for (const auto &i : merge_or) cout << i;
cout << endl;
}
001
101
011
AND 001
OR 001