C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のファイル処理におけるtellp()関数の使い方を解説


C++のファイル処理において、tellp()関数は出力ストリームと組み合わせて使用される関数で、ストリーム内のポインタ(書き込み位置)の現在位置を返します。戻り値は整数データ型であり、ストリームポインタが現在指している位置を表します。

tellp()メソッドは引数を一切取らず、以下のように記述します。

pos_type tellp();

アルゴリズム

tellp()を使用したファイル処理の基本的な流れは以下の通りです。

  1. fstreamクラスのオブジェクト(ここでは newfile)を作成します。
  2. open()メソッドを呼び出し、オブジェクト newfile を使って「tpoint.txt」ファイルを書き込みモードで開きます。
  3. ファイルオブジェクト newfile にデータを挿入します。
  4. tellp()メソッドを呼び出し、ファイルオブジェクト内のポインタの現在位置を出力します。
  5. close()メソッドを呼び出して、ファイルオブジェクトを閉じます。

サンプルコード

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    fstream newfile;
    newfile.open("tpoint.txt", ios::out); // 書き込み操作のためにファイルを開く
    newfile << "Tutorials Point";          // データの挿入
    cout << "ファイル内のポインタの現在位置: "
         << newfile.tellp() << endl;       // ファイルオブジェクト内のポインタの位置
    newfile.close();                       // ファイルオブジェクトを閉じる
}

実行結果

ファイル内のポインタの現在位置: 15

実行結果の解説

このプログラムでは、文字列「Tutorials Point」(15文字)をファイルに書き込んだ直後に tellp() を呼び出しています。そのため、ポインタは先頭から15バイト目の位置を指しており、出力結果として「15」が表示されます。このように tellp() を使うことで、現在の書き込み位置を簡単に確認できます。

  1. C++で解く「3nスライスのピザ」問題 ― 動的計画法でスライスの合計を最大化する方法

    問題の概要 大きさがまちまちの 3n 個のスライスからなるピザがあるとします。私と友人2人は、次のルールに従ってピザを取っていきます。 私が任意のスライスを1枚選びます。 友人のAmalは、私が選んだスライスの反時計回り方向に隣接するスライスを取ります。 友人のBimalは、私が選んだスライスの時計回り方向に隣接するスライスを取ります。 ピザのスライスがなくなるまで、この手順を繰り返します。 各スライスの大きさは、時計回りの順に並べた環状配列 slices として与えられます。求めるのは、私が手にできるスライスの大きさの合計の最大値です。 入出力例 入力が [9, 8, 6, 1, 1,

  2. C++の例外処理入門!try・catch・throwの基本と標準例外クラス一覧

    C++における例外処理(Exception Handling)とは、プログラムの実行時に発生するエラー(ランタイムエラー)を適切に扱うための仕組みです。例外とは、実行時に送出(スロー)されるイベントのことで、C++ではすべての標準例外が std::exception クラスから派生しています。もし例外を捕捉しなかった場合、例外メッセージが出力され、プログラムは強制終了してしまいます。 C++標準では、例外関連のクラスが <exception> ヘッダに定義されており、プログラムの中で自由に利用できます。親子関係によるクラス階層は次のようになっています。 C++の主な標準例外クラス