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

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

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

Re[2]: vector<char> を istream にできますか?


(過去ログ 35 を表示中)

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

■17442 / inTopicNo.1)  vector<char> を istream にできますか?
  
□投稿者/ kirapa (1回)-(2008/04/24(Thu) 10:37:08)

分類:[C/C++] 

std::istream& operator >> (std::istream &strm, Hoge &rhs);
でデータの読込ができるクラス Hoge があります。

vector<char> からデータを読みたいのですが operator >> を使って読む方法はありませんか?
&*v.begin() から &*v.end() までを istream の範囲にしたいのですが方法がわかりません。

vector<char> v;
// v にデータを設定
istream strm;	//どうやって書く?
Hoge hoge;
strm >> hoge;

よろしくお願いします。

引用返信 編集キー/
■17444 / inTopicNo.2)  Re[1]: vector<char> を istream にできますか?
□投稿者/ επιστημη (944回)-(2008/04/24(Thu) 11:06:46)
επιστημη さんの Web サイト
出番だ♪

> vector<char> v;
> // v にデータを設定
> istream strm;	//どうやって書く?
> Hoge hoge;
> strm >> hoge;

istreamの派生クラス: istringstream を使うんが吉かな。
vector<char> から string に変換し、istringstreamのコンストラクタに与えます。

#include <iostream>
#include <vector>
#include <string>
#include <sstream>

class Person {
  int age;
  std::string name;
public:
  friend std::istream& operator>>(std::istream& stream, Person& p) {
    return stream >> p.age >> p.name;
  }
  void print() const {
    std::cout << name << " は " << age << " 才\n";
  }
};

int main() {
  std::vector<char> input;
  input.push_back('2');
  input.push_back('8');
  input.push_back(' ');
  input.push_back('m');
  input.push_back('n');
  input.push_back('o');
  input.push_back('w');
  
  // ココ!
  std::istringstream stream(std::string(input.begin(),input.end()));

  Person person;
  stream >> person;
  person.print();
}

引用返信 編集キー/
■17445 / inTopicNo.3)  Re[2]: vector<char> を istream にできますか?
□投稿者/ kirapa (3回)-(2008/04/24(Thu) 12:00:13)
std::vector<char> input; でバイナリデータを扱いたかったので、
以下のコードで確認できました。

επιστημη さん ありがとうございました。


#include <iostream>
#include <vector>
#include <string>
#include <sstream>

class Person {
  int age;
  std::string name;
public:
  friend std::istream& operator>>(std::istream& stream, Person& p) {
    stream.read(reinterpret_cast<char*>(&p.age), sizeof(int));
    return stream >> p.name;
  }
  void print() const {
    std::cout << name << " は " << age << " 才\n";
  }
};

int main() {
  std::vector<char> input;
  input.push_back(28);
  input.push_back(0);
  input.push_back(0);
  input.push_back(0);
  input.push_back('m');
  input.push_back('n');
  input.push_back('o');
  input.push_back('w');
  
  // ココ!
  std::istringstream stream(std::string(input.begin(),input.end()));

  Person person;
  stream >> person;
  person.print();
}

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -