C++ vector ?

[戻る]
anri 2006/07/27(木) 09:46:30
WinXP(SP2) VC++.NET2003 MFC

vector

anri 2006/07/27(木) 09:50:45
ごめんなさい 間違えました。

C++ ベクター?のつづきで

vector を構造体にしようしたいのですが
どうしたらよいでしょうか
普通のつかいかたでいいのでしょうか?

構造体の中の一つの要素に値を入れるときは?????

ちょっと混乱中です

よろしくお願いします。

Blue 2006/07/27(木) 10:02:23
#include <iostream>
#include <vector>

struct Foo
{
    int m_n1;
    int m_n2;
};

int main()
{
    std::vector< Foo > vf;
    Foo f;

    f.m_n1 = 1;
    f.m_n2 = 2;
    vf.push_back( f );

    f.m_n1 = 3;
    f.m_n2 = 4;
    vf.push_back( f );

    std::cout << "vf[ 0 ].m_n1 = " << vf[ 0 ].m_n1 << std::endl;
    std::cout << "vf[ 1 ].m_n2 = " << vf[ 1 ].m_n2 << std::endl;

    return 0;
}

これで、理解できますか?

anri 2006/07/27(木) 10:08:12
ありがとうございます。
使い方はわかりましたが 質問があります。

 
f.m_n1 = 1;
f.m_n2 = 2;

vf.push_back( f ); //これは構造体の全ての項目に値を入れてから

しないといけないのでしょうか?

Ban 2006/07/27(木) 10:10:40
普通は値を設定した(有効になった)データを入れると思いますが、
空の構造体を設定しておいて後から値を入れる、などもありえますし、
必ず奏しなければいけない、というものでもありません。

# fillとかcopy、assign等を使うのも常套手段。

Blue 2006/07/27(木) 10:11:13
> //これは構造体の全ての項目に値を入れてから
べつにpush_backした後でも、入れれると思いますが試してみましたか?

    std::vector< Foo > vf;
    Foo f;

    f.m_n1 = 1;
    //f.m_n2 = 2;
    vf.push_back( f );
    vf[ 0 ].m_n2 = 2;

    std::cout << "vf[ 0 ].m_n2 = " << vf[ 0 ].m_n2 << std::endl;

anri 2006/07/27(木) 10:22:28
ありがとうございます。

いろいろやってみて・・・(↓やった結果)

#include "stdafx.h"

#include <vector>

using namespace std;

typedef struct Foo
{
    int m_n1[10];
    int m_n2;
}Foo;

std::vector< Foo > vf;
Foo f;

int _tmain(int argc, _TCHAR* argv[])
{


    f.m_n1[0] = 1;
   // f.m_n2 = 2;
    vf.push_back( f );
    vf[0].m_n2 = 2;

    f.m_n1[1] = 3;
    f.m_n2 = 4;
    vf.push_back( f );

    std::cout << "vf[ 0 ].m_n1[0] = " << vf[ 0 ].m_n1[0] << std::endl;
    std::cout << "vf[ 0 ].m_n2 = " << vf[ 0 ].m_n2 << std::endl;
    std::cout << "vf[ 1 ].m_n1[1] = " << vf[ 1 ].m_n1[1] << std::endl;
    std::cout << "vf[ 1 ].m_n2 = " << vf[ 1 ].m_n2 << std::endl;


    return 0;
}

vector の使い方がわかりました。
可変長OK!!!!!!!!!!!!!!

ありがとうございました!!!m(_ _)m

anri 2006/07/27(木) 10:23:37
[[解決]]
あ・・・ 解決済 おしわすれたwww

anri 2006/07/27(木) 10:26:42
vf[ 0 ].m_n1[0] = 1
vf[ 0 ].m_n2 = 2
vf[ 1 ].m_n1[1] = 3
vf[ 1 ].m_n2 = 4
Press any key to continue

このページをみながらお絵かきソフトを vector 化するので
実行結果をはるじぶんwwww

この掲示板サイコーーーーーーーー

anri 2006/07/27(木) 10:34:18
解決もしましたし、使用するのに問題は無いとおもいますが、
詳しくしりたいので質問します。

using namespace std;

これは何を表しているのでしょうか?
何のためにあり どう使われるのでしょうか?

επιστημη 2006/07/27(木) 10:49:37
上記のコードには不要です。

using namespace std; しておけば、
std::vector<Foo>, std::cout の 
std:: を省略し 
vector<Foo>, cout と書けます。

# 参考書を読んでください。
 

anri 2006/07/27(木) 10:58:16
!!!本当ですね
でも 何をあらわしているんですか?

using namespace std;

anri 2006/07/27(木) 11:00:25
myプログラムの vector 化のためのコピペ
見苦しいですが・・・ゆるしてください

#include "stdafx.h"
#include <vector>

using namespace std;

typedef struct Foo
{
    vector<int> m_n1;
    int m_n2;
}Foo;

vector< Foo > vf;
Foo f;

int _tmain(int argc, _TCHAR* argv[])
{


//  f.m_n1[0] = 1;
//    f.m_n2 = 2;
//    vf.push_back( f );
//    vf[0].m_n2 = 2;

//    f.m_n1[1] = 3;
//    f.m_n2 = 4;
//    vf.push_back( f );

    vf.push_back(f);
    vf.push_back(f);

    vf[0].m_n1.push_back(1);
    vf[0].m_n2 = 2;
    vf[1].m_n1.push_back(3);
    vf[1].m_n2 = 4;


    std::cout << "vf[ 0 ].m_n1[0] = "    << vf[ 0 ].m_n1[0]    << std::endl;
    std::cout << "vf[ 0 ].m_n2 =    "    << vf[ 0 ].m_n2        << 
std::endl;
    std::cout << "vf[ 1 ].m_n1[1] = "    << vf[ 1 ].m_n1[0]    << std::endl;
    std::cout << "vf[ 1 ].m_n2 =    "    << vf[ 1 ].m_n2        << 
std::endl;


    return 0;
}
/////////////////////////////////////
vf[ 0 ].m_n1[0] = 1
vf[ 0 ].m_n2 =  2
vf[ 1 ].m_n1[1] = 3
vf[ 1 ].m_n2 =  4

anri 2006/07/27(木) 11:01:45
・・・こうゆう(↑)掲示板の使い方はよくないですね
ごめんなさい
もうやめます。

Blue 2006/07/27(木) 11:04:26
> でも 何をあらわしているんですか?
は、まったく
># 参考書を読んでください。
をすれば解決すると思うのですが。

一応
ロベールのC++教室 - 第1章 業界のスタンダード -
http://www1.kcn.ne.jp/~robe/cpphtml/html04/cpp04001.html

anri 2006/07/27(木) 12:01:56
[[解決]]
ありがとうございます。

> > でも 何をあらわしているんですか?
> は、まったく
> ># 参考書を読んでください。
> をすれば解決すると思うのですが。
・・・まったくそのとうりです。

すこしは自分で調べることも覚えたいと思います。www

ありがとうございました!

επιστημη 2006/07/27(木) 13:02:32
じゃ、調べてここに書いといてくださいませ。
# それがホントの 'ありがとうございました' ってもんです。

anri 2006/07/27(木) 13:31:26
では
using namespace std;
につて

この記述はstdネームスペースを使うことをコンパイラにしらせているらしいです。
ネームスペースはいろいろなプログラム要素を配置できる宣言領域を作成します。
1つのネームスペースで宣言された要素は別のネームスペース内部で宣言された要素とは
分離されます。
using 文はコンパイラにstdネームスペースを使うことを知らせているらしいです。

・・・って本をうつしただけですが・・・

翔泳社 標準講座C++
1999-3-20
引用

ありがとうございました〜

古いスレッドには追加発言できません。