[英]How to compare and convert const reference and const_iterator
這是我必須處理的簡化版本。 我得到了一個包含數字的結構,一個包含數字向量的結構,以及一個包含數字引用的結構。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Number{
int a;
Number(int b): a(b){}
};
struct NumberCollection{
vector<Number>::const_iterator begin(){return numberVec.begin();}
vector<Number>::const_iterator end(){return numberVec.end();}
NumberCollection(){numberVec.emplace_back(5); numberVec.emplace_back(7); numberVec.emplace_back(11);}
private:
vector<Number> numberVec;
};
struct NumberRef{
Number const & myNumber;
NumberRef(Number const & input):myNumber(input){}
};
int main()
{
NumberCollection collection;
vector<Number>::const_iterator vec_it = collection.begin() +1;
}
首先,我想使用vec_it
NumberRef
其次,我想通過地址比較Number
結構,因為NumberCollection
將保存所有將存在的數字。
所以,首先,要創建一個NumberRef
你實際上只需要尊重迭代器。
NumberCollection collection;
vector<Number>::const_iterator vec_it = collection.begin() +1;
NumberRef numberRef(*vec_it);
其次,要比較兩者的地址,考慮一下:
cout << to_string(&(numberRef.myNumber) == &(*vec_it)) << endl; // prints out "1"
迭代器就像一個指向Number
的指針,因此您取消引用它以獲取Number
,並使用&
獲取Number
的地址。
請記住,這種比較僅在您比較完全相同的Number
結構時才有效,而不適用於具有等效數據的Number
結構。
Number a(7);
cout << to_string(&(numberRef.myNumber) == &a) << endl; //prints out "0"
根據您的需要,這可能是好是壞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.