Ich habe einen C++ - Code gemacht. Eine MList, die Elemente enthält. Ich habe den < Operator < überladen, um die Werte in MList in einem bestimmten Format zu drucken. Hier ist der Code:Operator Overloading Lösung
friend ostream& operator<<(ostream &out, const MSet<V> &m)
{
string s = "";
s += "Size " + to_string(m.size_) + "\n";//out << m.size() << endl;
s += "Cap " + to_string(m.capacity_) + "\n"; //out << m.capacity() << endl;
for (int i = 0; i < m.size_; i++)
{
if (i < m.size_ - 1)
s += m.ary[i].element + ",";//out << m.ary[i].element << ",";
else
s += m.ary[i].element;
}
//cout << "String : " << s;
return out << s;
}
Aber es druckt nicht korrekten Wert. Es druckt die Größe und Kapazität rechts, aber nicht die Werte. Anstelle von Werten, druckt es einige Zeichen wie Herz:
Sie können sehen, es druckt Größe und Kapazität Recht, aber nicht die Werte. Hier ist der relevante Code. Mir Ausführung Fall 2 nur gerade jetzt:
#include<iostream>
using std::cout; using std::endl;
using std::ostream; using std::cin; using std::boolalpha;
#include<string>
using std::string;
using namespace std;
template <class V>
struct SetElement
{
V element;
int cnt;
SetElement() = default;
SetElement(V v) : element(v){}
};
template <class V>
ostream &operator<<(ostream & o,const SetElement<V> &p)
{
return o << p.element;
}
template <class V>
class MSet
{
private:
SetElement<V> *ary;
size_t capacity_;
size_t size_;
public:
MSet(V val)
{
capacity_ = 2;
ary = new SetElement<V>[capacity_];
ary[0].element = val;
ary[0].cnt = 1;
size_ = 1;
}
SetElement<V>* find(V val)
{
SetElement<V> *found = nullptr;
bool yes = false;
for (int i = 0; i < size_ && !yes; i++)
{
if (ary[i].element == val)
{
found = &ary[i];
yes = true;
}
}
return found;
}
friend ostream& operator<<(ostream &out, const MSet<V> &m)
{
string s = "";
s += "Size " + to_string(m.size_) + "\n";//out << m.size() << endl;
s += "Cap " + to_string(m.capacity_) + "\n"; //out << m.capacity() << endl;
for (int i = 0; i < m.size_; i++)
{
if (i < m.size_ - 1)
s += m.ary[i].element + ",";//out << m.ary[i].element << ",";
else
s += m.ary[i].element;
}
//cout << "String : " << s;
return out << s;
}
};
int main(){
int test;
long l1, l2, l3;
cin >> test;
cout << boolalpha;
switch (test){
// ...
case 2: {
cin >> l1 >> l2;
MSet<long> m_l(l1);
auto p = m_l.find(l1);
if (p != nullptr)
cout << *p << endl;
else
cout << "Val:" << l1 << " not found " << endl;
p = m_l.find(l2);
if (p != nullptr)
cout << *p << endl;
else
cout << "Val:" << l2 << " not found " << endl;
//cout << "MList \n";
cout << m_l;
break;
}
// ...
}
}
ich das nicht verwandten C-Tag entfernt. Bitte fügen Sie keine nicht verwandten Tags hinzu. Außerdem erfahren Sie, wie Sie ein [*** Minimales ***, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) erstellen können. Schließlich sollten Sie lernen, wie Sie einen Debugger verwenden und wie Sie Ihren Code Zeile für Zeile durchgehen. –
Ich habe den Debugger verwendet und den Code Zeile für Zeile ausgeführt und überprüft. Die Zeichenfolge im Debugger ist s = "Größe 1 \ nCap 2 \ n \ x3". Aber wenn es auf die Konsole druckt Statt 3 druckt es einige Symbole. Ich weiß es nicht. Ich kann den Wert 3 im Debugger sehen, aber wenn er mit String verkettet wird, fügt er \ x3 ein. –