C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: vectorによる多次元配列のポインタ渡し


(過去ログ 81 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■48150 / inTopicNo.1)  vectorによる多次元配列のポインタ渡し
  
□投稿者/ yuka (1回)-(2010/03/25(Thu) 22:28:41)

分類:[C/C++] 

【使用言語】Visual C++ 2008 Express Edition
【開発環境】WindowsXP SP2

お世話になっております。yukaと申します。
現在vectorによって構造体を多次元配列にして、それを関数で渡し処理をするプログラムを作成しています。
具体的に書きますと、下記の通りとなります。

typedef struct tPIC{
int x;
int y;
}PIC;

main(){
vector<vector<PIC>> pics;
func(&pics);
}

void func(vector<vector<PIC>> * _pics){
// ここで_picsの中のxとyの値取得の方法が不明
}

アロー演算子など色々使用してみたのですが、どうしても上手くいきません・・・。
とても基本的な事だと理解はしているのですが、検索しても調べても分らず質問致しました。
方法をご存知の方が居られましたらご教授ください。

どうぞよろしくお願いします。
引用返信 編集キー/
■48153 / inTopicNo.2)  Re[1]: vectorによる多次元配列のポインタ渡し
□投稿者/ 774RR (491回)-(2010/03/25(Thu) 22:52:29)
ポインタがよくわからないのなら、とりあえず参照使ってみるといいんでないかな。
引用返信 編集キー/
■48158 / inTopicNo.3)  Re[1]: vectorによる多次元配列のポインタ渡し
□投稿者/ Jitta on the way (592回)-(2010/03/26(Fri) 06:50:51)
No48150 (yuka さん) に返信
vector ひとつなら参照できる?
引用返信 編集キー/
■48159 / inTopicNo.4)  Re[2]: vectorによる多次元配列のポインタ渡し
□投稿者/ επιστημη (2471回)-(2010/03/26(Fri) 08:19:29)
επιστημη さんの Web サイト
↓いっぺん参照体に移してしまえば*が消えて楽。

#include <iostream>
#include <vector>

using namespace std;

struct PIC {
  int x;
  int y;
};

void func(vector<vector<PIC>> * _pics){
  for ( int i = 0; i < _pics->size(); ++i ) {
    vector<PIC>& row = (*_pics)[i]; // ココね。
    for ( vector<PIC>::iterator iter = row.begin();
          iter != row.end(); ++iter) {
      cout << " (" << iter->x << ',' << iter->y << ") ";
    }
    cout << endl;
  }
}

int main() {
  vector<vector<PIC>> pics;
  for ( int i = 0; i < 10; ++i ) {
    pics.push_back(vector<PIC>());
    for ( int j = 0; j <= i; ++j ) {
      PIC value; value.x = i; value.y = j;
      pics[i].push_back(value);
    }
  }
  func(&pics); 
}

引用返信 編集キー/
■48160 / inTopicNo.5)  Re[3]: vectorによる多次元配列のポインタ渡し
□投稿者/ 774RR (492回)-(2010/03/26(Fri) 08:42:20)
ポインタに対して operator[] を適用するとソース上の記述が不細工すぎるし、
途中から参照つかうくらいなら、最初から参照使えばいいと思うの心。

#include <vector>
#include <iostream>

struct pos {
    pos(int x0, int y0) : x(x0), y(y0){}
    int x;
    int y;
};

void func0(std::vector<std::vector<pos> >& a) {
    std::cout << a[0][0].x << ',' << a[0][1].y << std::endl;
    std::cout << a[1][0].y << ',' << a[1][1].x << std::endl;
}

void func1(std::vector<std::vector<pos> >* a) {
    std::cout << a->operator[](0)[0].x << ',' << a->operator[](0)[1].y << std::endl;
    std::cout << a->operator[](1)[0].y << ',' << a->operator[](1)[1].x << std::endl;
}

int main() {
    std::vector<std::vector<pos> > v;
    std::vector<pos> row0;
    row0.push_back(pos(1,2));
    row0.push_back(pos(3,4));
    v.push_back(row0);
    std::vector<pos> row1;
    row1.push_back(pos(-1,-2));
    row1.push_back(pos(-3,-4));
    v.push_back(row1);
    func0(v);
    func1(&v);
    return 0;
}

引用返信 編集キー/
■48162 / inTopicNo.6)  Re[4]: vectorによる多次元配列のポインタ渡し
□投稿者/ επιστημη (2472回)-(2010/03/26(Fri) 08:52:07)
επιστημη さんの Web サイト
> ポインタに対して operator[] を適用するとソース上の記述が不細工すぎるし、

あー。
んじゃ _pics->at(i).at(j) なんてのもアリかも ^^;

引用返信 編集キー/
■48188 / inTopicNo.7)  Re[5]: vectorによる多次元配列のポインタ渡し
□投稿者/ yuka (2回)-(2010/03/26(Fri) 16:25:57)
お返事遅くなりまして申し訳ございません!!
774RRさん、Jitta on the wayさん、επιστημηさん、お返事ありがとうございます。

やっぱり私の理解不足が問題ですね・・・。
ポインタと参照渡しが似たようなものだと思っていました。(番地を渡してるだけ)

お二人が書いてくださったソースコードを見て、少し分った気がします。
この情報を元に、もうちょこっと調べて理解してから使ってみます。

本当にありがとうございました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -