Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在std::set中打印的垃圾值_C++_Stl_Set - Fatal编程技术网

C++ 在std::set中打印的垃圾值

C++ 在std::set中打印的垃圾值,c++,stl,set,C++,Stl,Set,我编写了下面的简单程序,以找出两个输入字符串s和t之间不同的单个字符: class Solution { public: char findTheDifference(string s, string t) { std::set<char> set1; std::set<char> set2; int i=0; while(s[i]!='\0') { set1.insert(

我编写了下面的简单程序,以找出两个输入字符串
s
t
之间不同的单个字符:

class Solution {
public:
    char findTheDifference(string s, string t) {
        std::set<char> set1;
        std::set<char> set2;
        int i=0;

        while(s[i]!='\0') {
            set1.insert(s[i]);
            i++;
        }

        i=0;
        while(t[i]!='\0') {
            set2.insert(t[i]);
            i++;
        }

        std::set<char>::iterator it;
        for(it=set1.begin(); it!=set1.end(); it++)
            cout<<*it;
        cout<<"\n";
        for(it=set2.begin(); it!=set2.end(); it++)
            cout<<*it;
        cout<<"\n";

        std::set<char> v;
        std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), std::inserter(v, v.end()));
        cout<<*(v.begin());

        return *(v.begin());
    }
};
函数返回的
char
值为
\x00
。我的问题是,这个垃圾值(
\x00
)是从哪里打印和返回的?


谢谢你的帮助

您的程序调用UB,因为set2中的所有元素都存在于set1中,并且在std::set_差异调用之后,v中没有任何元素

从cpp.reference页面:

template
输出集_差(输入第一个1,输入最后一个1,
InputIt2 first2,InputIt2 last2,
先输出d_);
复制排序范围[first1,last1]中的元素,这些元素是 在排序范围[first2,last2]到范围开始处未找到 首先是迪乌


还有一些其他提示:

1) 最好将参数设置为常量引用

2) 可以直接使用范围构造函数从字符串构造集


3) 您可以使用copy和ostream_迭代器打印不带周期的集合。

您的程序调用UB,因为set2中的所有元素都存在于set1中,而std::set_差分调用后v中没有元素

从cpp.reference页面:

template
输出集_差(输入第一个1,输入最后一个1,
InputIt2 first2,InputIt2 last2,
先输出d_);
复制排序范围[first1,last1]中的元素,这些元素是 在排序范围[first2,last2]到范围开始处未找到 首先是迪乌


还有一些其他提示:

1) 最好将参数设置为常量引用

2) 可以直接使用范围构造函数从字符串构造集

3) 您可以使用copy和ostream_迭代器打印集合,而不使用循环

 cout<<*(v.begin());
,当容器为空时,您正在以未定义的行为冒险运行程序,正如
begin()==end()

 cout<<*(v.begin());
,当容器为空时(因此
*(v.begin())
表现出未定义的行为),您的程序将面临未定义行为的风险。没有在
set1
中存在但在
set2
中不存在的元素。您可能希望使用
std::set\u symmetric\u difference
v
为空(因此
*(v.begin())
显示未定义的行为)。在
set1
中没有元素,但在
set2
中没有元素。您可能想使用
std::set\u symmetric\u difference
是的,明白了!:)谢谢。一旦我能接受答案,我就会接受。是的,明白了!:)谢谢。一旦我能接受答案,我就会接受。
 cout<<*(v.begin());
 if(v.begin() != v.end())