【问题标题】:Applying or(||) operator on two vectors containing only 0 and 1对仅包含 0 和 1 的两个向量应用 or(||) 运算符
【发布时间】:2017-10-01 14:29:57
【问题描述】:

我有两个向量: A = {1,0,1,1}, B = {0,1,1,1}。 我如何在这两个上应用或运算符,以便我可以得到一个向量: C = {0,0,1,1}。

【问题讨论】:

  • 您说您想使用 OR,但您的预期输出建议使用 AND。它是哪一个?你尝试过什么?
  • 听起来你想要一个 AND 运算符,而不是 OR 运算符...1011 V 0111 = 1111 vs 1011 ^ 0111 = 0011
  • 根据您的用例,std::valarray 可能值得考虑。
  • 由于问题被标记为vector,您似乎正在寻找动态位集。为此,应避免使用std::vector<int>std::vector<bool>(由于后者的特殊性质)。如果您确实正在寻找动态位集,那么我在下面链接到的问答可能是此问题的适当副本。另请参阅 std::bitsetboost::dynamic_bitset

标签: c++ c++11 vector c++14


【解决方案1】:
std::vector<int> C;
std::transform(A.begin(), A.end(), B.begin(),
    std::back_inserter(C), std::logical_and<int>());

【讨论】:

  • 还需要查看B.size() &gt;= A.size()。如果这不是真的,则行为未定义。
【解决方案2】:

您可以使用索引逐个元素地遍历它们

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> A = {1, 0, 1, 1};
    std::vector<int> B = {0, 1, 1, 1};

    std::vector<int> C(A.size());
    for (std::size_t i = 0; i < A.size(); ++i)
    {
        C[i] = A[i] && B[i];
    }

    for (auto value : C)
    {
        std::cout << value << " ";
    }
}

【讨论】:

  • 如果数组是固定大小的,也可以考虑使用std::bitset
猜你喜欢
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多