簡體   English   中英

如何比較和轉換 const 引用和 const_iterator

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM