ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    ホームページ    使用可能タグ一覧

No.2624

vector<char>〜 の使い方
投稿者---愛子(2004/09/04 08:51:09)


おはようございます。愛子です。
STL勉強中です。宜しくお願いたします。

数値としては-1〜10までなのですが、データ数(配列数?)は、
1億を超えてしまうことが予想される為、
vector<char>としようと思いました。
そこで、下記のようなコードを書いてみたのですが、
1,-1ではなく、化け文字のようなものが出力されてしまいました。(T_T)
vector<signed char>でも結果は同じでした。

どなたかご存知の方がいらっしゃいましたら、宜しくお願い致します。


#include <cstdio>
#include <vector>
#include <iostream>

using namespace std;

int main(){
    char i;

    vector<char> flag;

    flag.push_back(1);
    flag.push_back(-1);

    for(i=0; i<flag.size(); i++)
        cout <<"flag = " << flag[i] << endl;
    return(0);
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> vector<char>〜 の使い方(環境記述追加) 2625 愛子 2004/09/04 08:54:10
<子記事> Re:vector<char>〜 の使い方 2626 monkey 2004/09/04 09:21:08
<子記事> Re:vector<char>〜 の使い方 2627 かずま 2004/09/04 14:05:50


No.2625

vector<char>〜 の使い方(環境記述追加)
投稿者---愛子(2004/09/04 08:54:10)


すみません。
環境について書き忘れました。
コンパイラは、VC 6.0 と Solaris2.5.1 WorkShop Compilers 5.0で
動作可能としたいです。
Windows上では1億は無理ですが、少ないデータの時にPCで出来れば
便利かと思って。。。


この投稿にコメントする

削除パスワード

No.2626

Re:vector<char>〜 の使い方
投稿者---monkey(2004/09/04 09:21:08)


数値として出力される型にキャストしてあげれば良いです。
符号修飾なしの"char型"が符号ありかなしかは処理系依存なので、数値として扱うときは符号修飾をつけた方が良いと思います.

#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector< signed char > flag;

    flag.push_back(  1 );
    flag.push_back( -1 );

    for( size_t i = 0; i < flag.size(); i++ )
        cout << "flag = " << static_cast< int >( flag[i] ) << endl;
}



この投稿にコメントする

削除パスワード

No.2627

Re:vector<char>〜 の使い方
投稿者---かずま(2004/09/04 14:05:50)


int  i = 65;  cout << i;
char c = 65;  cout << c;

この違いがわかりますか?

ostream::operator<<(int) と ostream::operator<<(char) の定義が違うんですね。

さて、プログラムのほうですが、signed char から int への変換を行うために
キャストを使うこともできますが、クラスを作るという手もあります。

#include <vector>
#include <iostream>

class small_int {
    signed char v;
public:
    small_int(int x = 0) : v(x) { }
    operator int() { return v; }
};

int main()
{
    using namespace std;
    vector<small_int> flag;

    flag.push_back(1);
    flag.push_back(-1);

    for (size_t i = 0; i < flag.size(); i++)
        cout << "flag = " << flag[i] << endl;
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    ホームページ    レンタル掲示板サービス




掲示板提供:Real Integrity