向量的大小是不是有可能为 1 但其中的元素数量为零?

Posted

技术标签:

【中文标题】向量的大小是不是有可能为 1 但其中的元素数量为零?【英文标题】:Is there any possibility that the size of the vector is 1 but with zero number of elements in it?向量的大小是否有可能为 1 但其中的元素数量为零? 【发布时间】:2017-08-12 10:28:30 【问题描述】:

在下面的代码中,我有 4 个向量 a,b,v1,v2

在计算a和b的集合差后,b和a我将它们的结果分别存储在v1和v2向量中。

向量 'a' 包含元素 'a','b','c' 和 向量 'b' 包含元素 'a','b'。 现在 v1 包含大小为 1 的“c”,但 v2 不包含大小为 1 的“c”。 这怎么可能? 注意向量 a 和 b 包含集合的元素!!!

这是我的代码:

    #include <bits/stdc++.h>
    #define REP(i,x,y) for(auto i=x;i!=y;i++)
    using namespace std;
    int t;
    string s1,s2;
    bool flag;
    int main() 
    
    cin>>t;
    while(t--)
    
    flag=false;
    set<char> a,b;  multiset<char> A,B;
    cin>>s1>>s2;
    REP(i,0,s1.length())
    
        A.insert(s1[i]);
        a.insert(s1[i]);
        B.insert(s2[i]);
        b.insert(s2[i]);
    
    vector<char> v1,v2;
  set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(v1,v1.begin()));
    set_difference(b.begin(),b.end(),a.begin(),a.end(),inserter(v2,v2.begin()));
    cout<<v1.size()<<" "<<v2.size()<<"\n";
    REP(i,v1.begin(),v1.end())
    cout<<*i<<" ";
    cout<<"\n";
    REP(i,v2.begin(),v2.end())
    cout<<*i<<" ";
    cout<<"\n";

return 0;

输入: 3 abaac 抗体 阿坝 cde 抗体 光盘

输出:

    1 1
    c 

    2 3
    a b 
    c d e 
    2 2
    a b 
    c d 

【问题讨论】:

你怎么知道,没有? 我得到了正确的输出。 根据the manual,需要对向量进行排序才能使其工作。 @chinnabathinikarunakar 请提供minimal reproducible example 与您声称的行为。否则不会发生。 你怎么知道的? 【参考方案1】:

set_difference 需要 排序 个容器。

template <class InputIterator1, class InputIterator2, class OutputIterator>
  OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
                                 InputIterator2 first2, InputIterator2 last2,
                                 OutputIterator result);

构造一个从结果指向的位置开始的排序范围 与排序范围 [first1,last1) 的集合差异 关于排序范围 [first2,last2)。


vector<int> a='a','b','a','c', b ='a','b', v1,v2;

std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());

set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(v1,v1.begin()));
set_difference(b.begin(),b.end(),a.begin(),a.end(),inserter(v2,v2.begin()));


std::cout << "Vector v1: (" << v1.size() << ")" << std::endl;
for(auto it:v1)

    std::cout << it << std::endl;


std::cout << "Vector v2: (" << v2.size() << ")" << std::endl;
for(auto it:v2)

    std::cout << it << std::endl;

输出

Vector v1: (2)
97
99
Vector v2: (0)

【讨论】:

在我的情况下不需要排序,因为我已经将集合的元素存储在这些向量中。 当我回复时,您的 vector'a','b','a','c'。而且它没有排序在我看来【参考方案2】:

据我所知,没有这种可能性。 问题出在代码本身!! 在提供输入时,我应该将字符串作为相同大小的字符串。 那就是我出错的地方,因此我没有在集合中插入任何内容。 感谢大家抽出宝贵的时间解决我的问题。

【讨论】:

以上是关于向量的大小是不是有可能为 1 但其中的元素数量为零?的主要内容,如果未能解决你的问题,请参考以下文章

从向量数组中查找给定向量中公共元素的数量

Libsvm 将支持向量的数量设为零

矢量调整大小 - 检测的便携方式

生成一个矩阵,其中包含取自 n 个向量的元素的所有组合

统计/组合算法

Swift:检查变量是不是为零