概念レベルとデザインレベルのどちらかに壊れたものがたくさんあります。
指を2つの異なるものに同時に指向させることはできますか?いいえ?そのため、1つの索引を使用して区別できる2つの異なるベクトルに対処することはできません。
あなたは多くのことを行うことができますどのような方法2つの値を「組み合わせる」するint型1は、ビューの構文の点で 良いです:
return m_x[i]+m_y[x]
またはreturn sin(m_x[i])*cos(m_y[i])
またはreturn whatever_complicated_expression_you_like_much
しかし、それの意味は何ですか?ポイントはあなたのクラスに2つのベクトルがあるのはなぜですか?何を表現してほしいですか?あなたは(意味的に)それらの両方を索引付けすることは何を意味しますか?私は彼らの区別を維持するために行うことができます
何かがあなたがstd::pair<double,double>
そのfist
とsecond
メンバーがm_x [i]とm_y [i]をそれぞれ取得すること
auto operator[](int i) const
{ return std::make_pair(m_x[i],m_y[i]); }
そうです。
または...あなたが他の質問についてreturn std::vector<double>{m_x[i],m_y[i]};
をすることができます:はい、パブリックとして継承して保護された部分にアクセスすることができる新しいクラスを作る:それは何のためにあるのか、保護です。
はい、あなたはR/W:public、protected、privateは可視性であり、可読性と書き込み性はありません。それがconstの意味です。
もう一度:あなたのクラスは何を表していますか?そのような情報がなければ、私たちは何が意味を成立させることができないのか、何ができないのかを確立することはできませ
[OK]を、あなたのコメントを次のように述べています
あなたは二つの異なるfuncntions必要があります:あなたはベクトルが既知の長さ-sayを知っている場合は、読み取りのための1(double operator[](unsigned) const
)と書き込み用(double& operator[](unsigned) const
)
を200、あなたはベクトルを識別するためにi/1000のようなidex変換をコード化することができ、インデックスを取得するためにi%1000を使用することができる.0.199 addres最初、1000..1199 address第2の2000..2199 address 3番目など...
または...インデックスとして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();
...
として一緒に連鎖vetorことができます。
しかし、あなたが代わりにm_x、m_yとm_z上記のコードのstd::array<std::vector<double>,N> m;
ができる持っている場合は、ベクトルの配列の代わりに、個別のベクトル変数
を使用して、よりアルゴリズム的な解決策を得ることができます...
for(auto& v: m)
{
if(i<v.size()) return v[i];
i-=v.size();
}
2つの別々のベクトルの代わりに 'std :: vector> 'を使用しないのはなぜですか? –
1つの方法、1つの変数。コードの意味についての詳細を私たちに教えてください。さらに、追加の答えは*はい*です。 –
@sorosh_sabzベクトルが3つ以上ある場合、私はどうしますか? #Biagio変数にアクセスするすべてのクラスに共通の変数を保持するインターフェイスクラスです。それらの数は定義されていません。つまり、時間が経つにつれて大きくなります。 –