Есть ли вероятность, что размер вектора равен 1, но с нулевым числом элементов в нем?

Здесь в приведенном ниже коде у меня есть 4 вектора a,b,v1,v2,

После вычисления разности множеств a и b, b и a I я сохранил их результаты в векторах v1 и v2 соответственно.

  • вектор ‘a’ имеет элементы {‘a’, ‘b’, ‘c’} и
  • вектор ‘b’ содержит элементы {‘a’, ‘b’}.
  • Теперь v1 содержит ‘c’ с его размером 1, но v2 не содержит ни одного и с размером 1.
    Как это возможно?
    Обратите внимание, что векторы 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
аб
CD

Выход:

    1 1
c

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

-8

Решение

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)
1

Другие решения

Насколько я знаю, такой возможности нет.
Проблема с самим кодом!
Там, давая данные, я должен давать строки как строки одинакового размера.
Вот где я пошел не так, и поэтому я ничего не вставил в набор.
Спасибо всем за то, что вы уделили драгоценное время решению моей проблемы.

-1

По вопросам рекламы [email protected]