無論是在概念上還是在設計層面上,都有很多破碎的東西。
你能夠將你的手指同時指向兩個不同的東西嗎?沒有?這就是爲什麼你不能使用一個索引來解決兩個不同的向量保留他們的區別。
你可以做很多事情:任何方式,以「結合」兩值INT一個好 通過視圖語法點:
return m_x[i]+m_y[x]
或return sin(m_x[i])*cos(m_y[i])
或return whatever_complicated_expression_you_like_much
但是,什麼那是什麼意思?重點是爲什麼你的班級裏有兩個向量?你想讓他們代表什麼?你是什麼意思(語義上)索引他們兩個?
什麼事情我可以做,以保持它們之間的區別是
auto operator[](int i) const
{ return std::make_pair(m_x[i],m_y[i]); }
,讓你得到一個std::pair<double,double>
其fist
和second
件分別是m_x [i]和m_y [1]。
或者......你可以return std::vector<double>{m_x[i],m_y[i]};
關於您的其他問題:是的,繼承的公共使得新類能夠訪問受保護的部分:這是什麼保護的。
是的,你喜歡R/W:public,protected和private是關於可見性,而不是可讀性和可寫性。這就是常量。
但是,你的班級代表什麼?沒有這些信息,我們就無法確定什麼是有意義的,什麼不是。
好吧,說您的評論:
需要兩個不同的funcntions:一個用於讀取(double operator[](unsigned) const
),一個用於寫入(double& operator[](unsigned) const
)
如果您知道載體具有已知長度-say 200-,你可以編碼一個像i/1000這樣的idex transforamtion來識別向量,並且i%1000獲得索引,這樣0..199地址第一個,1000..1199地址第二個2000..2199地址第三...等等
或...喲你可以使用std::pair<unsigned,unsigend>
作爲索引(like operator[](const std::pair<unsigned,unsigned>& i)
,使用i.first來標識向量,並且使用i.second來索引它,然後調用x [{1,10}},x [{3,30}}等。
或者......你可以鏈縮放的矢量一起作爲
if(i<m_x.size()) return m_x[i]; i-=m_x:size();
if(i<m_y.size()) return m_y[i]; i-=m_y:size();
if(i<m_z.size()) return m_z[i]; i-=m_z:size();
...
,讓您對其進行索引連續。
但可以使用的載體,而不是不同的矢量變量
的陣列,如果你有std::array<std::vector<double>,N> m;
代替m_x,m_y和m_z上述代碼可以得到更多的算法溶液...
for(auto& v: m)
{
if(i<v.size()) return v[i];
i-=v.size();
}
爲什麼你不使用'std :: vector>'而不是兩個單獨的向量? –
一種方法,一個變量。試着給我們提供關於你的代碼的語義的更多信息。此外,額外的答案是*是*。 –
@sorosh_sabz如果我有兩個以上的向量,我該怎麼辦? #Biagio它是一個接口類,它包含所有訪問變量的類的通用變量。他們的人數不確定,即會隨時間增長。 –