QkQuantumRegister
typedef struct QkQuantumRegister QkQuantumRegister一度に複数のビットをインスタンス化する一般的な方法は、レジスタを作成することである。 レジスタとは、名前の付いたビットの集まりである。 レジスタを作成することで、ビットの集まりに名前を付けることができ、回路内の特定のビットのメタデータとして使用できる。 この名前は、通常、回路を言語間で交換するためにエクスポートする際にも保存される。
例えば、 qk_quantum_register_new() を呼び出すことで、レジスタを作成することができる:
#include <qiskit.h>
QkQuantumRegister *qreg = qk_quantum_register_new(5, "my_qreg");これにより、 "my_qreg" という新しい5量子ビット・レジスタが作成される。
そして、レジスタを回路に追加するには、 qk_circuit_add_quantum_register() 関数を使う:
QkCircuit *qc = qk_circuit_new(0, 0);
qk_circuit_add_quantum_register(qc, qreg);
uint32_t num_qubits = qk_circuit_num_qubits(qc); // 5回路はレジスタを追跡するが、レジスタ自体は回路にほとんど動作の違いを与えない。
関数
qk_quantum_register_new
QkQuantumRegister *qk_quantum_register_new(uint32_t num_qubits, const char *name)
与えられた量子ビット数と名前で新しい量子レジスタを作成する
例
QkQuantumRegister *qr = qk_quantum_register_new(5, "five_qubits");安全
name パラメーターは、文字列の末尾に有効なヌル・ターミネーターを含むメモリーへのポインターでなければならない。 また、ヌル・ターミネーターまでのバイト数のリードに対しても有効でなければならない。
パラメーター
- num_qubits - レジスタを作成する量子ビットの数
- name - 作成されるレジスタの名前文字列。 名前は UTF-8 の有効な文字で構成されなければならない。
戻り値
作成されたレジスタへのポインタ
qk_quantum_register_free
void qk_quantum_register_free(QkQuantumRegister *reg)
量子レジスターを解放
例
QkQuantumRegister *qr = qk_quantum_register_new(1024, "qreg");
qk_quantum_register_free(qr);安全
reg が NULL または QkQuantumRegister への有効なポインタでない場合、動作は未定義となる。
パラメーター
- reg - 解放するレジスタへのポインタ.
qk_quantum_register_name
char *qk_quantum_register_name(const QkQuantumRegister *qreg)
量子レジスタの名前を取得します。
量子レジスタの名前を含む、新たに割り当てられた C 文字列を返します。
例
QkQuantumRegister *qr = qk_quantum_register_new(5, "my_qreg");
char *name = qk_quantum_register_name(qr);
printf("Register name: %s\n", name);
qk_str_free(name);
qk_quantum_register_free(qr);安全
QkQuantumRegisterが、への有効な(null ではない)ポインタでない場合 qreg 、その挙動は未定義となる。
パラメーター
- qreg – 量子レジスタへのポインタ。
戻り値
レジスタ名を含む、新しく割り当てられたヌル終端文字列へのポインタ。 qk_str_free呼び出し元は、この文字列を を使用して解放する必要があります。
qk_quantum_register_num_bits
size_t qk_quantum_register_num_bits(const QkQuantumRegister *qreg)
量子レジスタのビット数を取得します。
量子レジスタのサイズ(ビット数)を返します。
例
QkQuantumRegister *qr = qk_quantum_register_new(5, "my_qreg");
size_t num_qubits = qk_quantum_register_num_bits(qr);
printf("Number of qubits: %zu\n", num_qubits); // Prints: 5
qk_quantum_register_free(qr);安全
QkQuantumRegisterが、への有効な(null ではない)ポインタでない場合 qreg 、その挙動は未定義となる。
パラメーター
- qreg – 量子レジスタへのポインタ。
戻り値
レジスタのビット数。
qk_quantum_register_circuit_bits
void qk_quantum_register_circuit_bits(const QkQuantumRegister *qreg, const QkCircuit *circuit, uint32_t *out_bits)
量子レジスタ内のすべての量子ビットの回路ビットインデックスを取得します。
量子レジスタ内の各量子ビットから、回路の量子ビットリスト内の対応するインデックスへの対応関係を出力します。 UINT32_MAXレジスタ内の量子ビットが回路内に存在しない場合、マッピングにおけるそのインデックスは となります。
例
QkCircuit *qc = qk_circuit_new(2, 0);
QkQuantumRegister *qr = qk_quantum_register_new(3, "my_qreg");
qk_circuit_add_quantum_register(qc, qr);
uint32_t bit_indices[3];
qk_quantum_register_circuit_bits(qr, qc, bit_indices);
// bit_indices now contains [2, 3, 4] since all qubits are in the circuit
// and the circuit has 2 anonymous qubits
qk_quantum_register_free(qr);
qk_circuit_free(qc);安全
以下の場合、挙動は未定義となります:
QkQuantumRegister``qregは、. への有効で null ではないポインタではありません。QkCircuit``circuitは、. への有効で null ではないポインタではありません。qreg1つ以上のビットが設定されており、out_bitsかつ、少なくともqk_quantum_register_num_bits(qreg)個の要素を持つ配列への、アラインメントが取れており、かつヌルではないポインタではない。
パラメーター
- qreg – マッピング対象の量子レジスタへのポインタ。
- circuit – 量子ビットを含む回路へのポインタ。
- out_bits – マップされたインデックスが書き込まれる配列へのポインタ。
qreg配列は、少なくともqk_quantum_register_num_bits個の要素を持つように、事前に割り当てられていなければなりません。 各要素には、回路のビットインデックス、あるいはUINT32_MAXその量子ビットが回路に含まれていない場合は が格納されます。