向量的大小是不是有可能为 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 但其中的元素数量为零?的主要内容,如果未能解决你的问题,请参考以下文章