作者hardware (硬體)
看板C_and_CPP
標題Re: [問題] C++ list 元素查看
時間Thu Dec 10 10:57:17 2015
上一篇是
The STL is for data type int
元素相加~
但如果是
STL using a class
例如:
#include <list>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>
using namespace std;
class AAA
{
friend ostream &operator<<(ostream &, const AAA &);
public:
string x;
int y;
float z;
AAA();
AAA(const AAA &);
~AAA(){};
AAA &operator=(const AAA &rhs);
int operator==(const AAA &rhs) const;
int operator<(const AAA &rhs) const;
};
AAA::AAA() // Constructor
{
x = "NULL";
y = 0;
z = 0;
}
AAA::AAA(const AAA ©in) // Copy constructor to handle pass by value.
{
x = copyin.x;
y = copyin.y;
z = copyin.z;
}
ostream &operator<<(ostream &output, const AAA &aaa)
{
output << aaa.z << endl;
return output;
}
AAA& AAA::operator=(const AAA &rhs)
{
this->x = rhs.x;
this->y = rhs.y;
this->z = rhs.z;
return *this;
}
int AAA::operator==(const AAA &rhs) const
{
if( this->x != rhs.x) return 0;
if( this->y != rhs.y) return 0;
if( this->z != rhs.z) return 0;
return 1;
}
// This function is required for built-in STL list functions like sort
int AAA::operator<(const AAA &rhs) const
{
if( this->x == rhs.x && this->y == rhs.y && this->z < rhs.z) return 1;
if( this->x == rhs.x && this->y < rhs.y) return 1;
if( this->x < rhs.x ) return 1;
return 0;
}
main()
{
int sum = 0;
list<AAA> L;
AAA Ablob;
list<AAA>::iterator i;
Ablob.x="11";
Ablob.y=7;
Ablob.z=3.2355;
L.push_back(Ablob);
Ablob.x="11";
Ablob.y=7;
Ablob.z=7.2355;
L.push_back(Ablob);
cout<<"Ablob Unsort:"<<endl;
for(i=L.begin(); i != L.end(); ++i)
{
cout << *i ;
//sum = sum + *i;
}
cout << endl;
return 0;
}
要怎麼把 z這個成員的值相加,
也就是說我想要 3.2355 +7.2355 存到 sum,我用綠色這樣的方式不行
有人知道嗎?
謝謝~
※ 引述《hardware (硬體)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Linux G++
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: #include <iostream>
: #include <list>
: using namespace std;
: main()
: {
: int count =1;
: list<int> L;
: L.push_back(0);
: L.push_front(0);
: L.insert(++L.begin(),2);
: L.push_back(5);
: L.push_back(6);
: L.sort();
: list<int>::iterator i;
: for(i=L.begin(); i != L.end(); ++i)
: {
: cout << "第" << count << "個 "<< *i << " "<< endl;
: count++;
: }
: return 0;
: }
: 我們都知道用 iterator去觀看list所有的元素。
: 也可以用 L.front();去看第一個元素,
: 但有什麼方法可以看第二個元素?
: 謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.89.77
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1449716239.A.D9C.html
→ jaid: i->z 或是提供AAA的operator+ 12/10 11:08
→ jaid: 忘了sum是int 後面當我沒說 12/10 11:09
→ hardware: 感謝樓上,我把sum int 改成double了 12/10 11:12
→ hardware: 我用了第一個方式i->z是可以,AAA的operator+要怎麼用呢 12/10 11:13
→ jaid: 不是這問題 是你的+要對兩邊的型別有定義 像你原本寫的+左邊 12/10 11:16
→ jaid: 是int 右邊是AAA 根本沒辦法加 12/10 11:16
→ jaid: 因為你要加z 一個方法是右邊直接i->z 一個是你提供operator+ 12/10 11:19
→ jaid: (int, AAA)讓他照你想要的行為做 12/10 11:19
double operator+(const AAA &rhs) const
{
...
}
這樣嗎?
但是我不知道裏面要寫什麼
然後在main裏面怎使用他QQ
※ 編輯: hardware (140.117.89.77), 12/10/2015 11:26:22
→ jaid: 建議你去把operator overloading多看幾遍 你的例子不能寫在c 12/10 11:38
→ jaid: lass內 12/10 11:38
→ Caesar08: 寫個float getZ() const如何? 12/10 12:30
→ hardware: 我在研究看看 謝謝各位 12/10 14:01