QkClassicalRegister
typedef struct QkClassicalRegister QkClassicalRegisterEine gängige Methode, mehrere Bits auf einmal zu instanziieren, ist die Erstellung eines Registers. Ein Register ist eine benannte Sammlung von Bits. Die Erstellung eines Registers ermöglicht es, einer Sammlung von Bits einen Namen zu geben, der als Metadaten für bestimmte Bits in einer Schaltung verwendet werden kann. Dieser Name wird in der Regel auch beibehalten, wenn der Schaltkreis in andere Sprachen exportiert wird.
Sie können ein Register erstellen, indem Sie zum Beispiel qk_classical_register_new() aufrufen:
#include <qiskit.h>
QkClassicalRegister *creg = qk_classical_register_new(5, "my_creg");Dadurch wird ein neues klassisches 5-Bit-Register mit dem Namen "my_creg" erstellt.
Um das Register in eine Schaltung einzufügen, verwenden Sie die Funktion qk_circuit_add_classical_register() :
QkCircuit *qc = qk_circuit_new(0, 0);
qk_circuit_add_classical_register(qc, creg);
uint32_t num_qubits = qk_circuit_num_qubits(qc); // 5Während die Schaltungen die Register nachverfolgen, bewirken die Register selbst fast keine Verhaltensunterschiede bei den Schaltungen.
Funktionen
qk_classical_register_new
QkClassicalRegister *qk_classical_register_new(uint32_t num_clbits, const char *name)
Konstruieren Sie ein neues klassisches Register mit einer bestimmten Anzahl von Bits und einem bestimmten Namen
Beispiel
QkClassicalRegister *cr = qk_classical_register_new(5, "five_qubits");Sicherheit
Der Parameter name muss ein Zeiger auf einen Speicher sein, der einen gültigen Nullterminator am Ende der Zeichenkette enthält. Sie muss auch für das Lesen von Bytes bis einschließlich des Nul-Terminators gültig sein.
Parameter
- num_clbits - Die Anzahl der Clbits, für die das Register erstellt wird
- name - Der Namensstring für das erstellte Register. Der Name muss aus gültigen UTF-8 Zeichen bestehen.
Rückgabe
Ein Zeiger auf das erstellte Register
qk_classical_register_free
void qk_classical_register_free(QkClassicalRegister *reg)
Ein klassisches Register freigeben.
Beispiel
QkClassicalRegister *cr = qk_classical_register_new(1024, "creg");
qk_classical_register_free(cr);Sicherheit
Das Verhalten ist undefiniert, wenn reg nicht entweder null oder ein gültiger Zeiger auf eine QkClassicalRegister ist.
Parameter
- reg - Ein Zeiger auf das freizugebende Register.
qk_classical_register_name
char *qk_classical_register_name(const QkClassicalRegister *creg)
Den Namen eines klassischen Registers abrufen.
Gibt einen neu zugewiesenen C-String zurück, der den Namen des klassischen Registers enthält.
Beispiel
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
char *name = qk_classical_register_name(cr);
printf("Register name: %s\n", name);
qk_str_free(name);
qk_classical_register_free(cr);Sicherheit
QkClassicalRegisterDas Verhalten ist nicht definiert, wenn creg kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- creg – Ein Zeiger auf das klassische Register.
Rückgabe
Ein Zeiger auf eine neu zugewiesene, null-terminierte Zeichenkette, die den Registernamen enthält. Der Aufrufer muss diese Zeichenkette mit qk_str_free… freigeben.
qk_classical_register_num_bits
size_t qk_classical_register_num_bits(const QkClassicalRegister *creg)
Ermittle die Anzahl der klassischen Bits in einem klassischen Register.
Gibt die Größe (Anzahl der klassischen Bits) des klassischen Registers zurück.
Beispiel
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
size_t num_clbits = qk_classical_register_num_bits(cr);
printf("Number of clbits: %zu\n", num_clbits); // Prints: 3
qk_classical_register_free(cr);Sicherheit
QkClassicalRegisterDas Verhalten ist nicht definiert, wenn creg kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- creg – Ein Zeiger auf das klassische Register.
Rückgabe
Die Anzahl der klassischen Bits im Register.
qk_classical_register_circuit_bits
void qk_classical_register_circuit_bits(const QkClassicalRegister *creg, const QkCircuit *circuit, uint32_t *out_bits)
Rufe die Schaltungsbit-Indizes für alle clbits in einem klassischen Register ab.
Gibt eine Zuordnung von jedem clbit im klassischen Register zu seinem entsprechenden Index in der clbit-Liste der Schaltung aus. UINT32_MAXWenn ein Clbit aus dem Register in der Schaltung nicht vorhanden ist, lautet sein Index in der Zuordnung.
Beispiel
QkCircuit *qc = qk_circuit_new(0, 2);
QkClassicalRegister *cr = qk_classical_register_new(3, "my_creg");
qk_circuit_add_classical_register(qc, cr);
uint32_t bit_indices[3];
qk_classical_register_circuit_bits(cr, qc, bit_indices);
// bit_indices now contains [2, 3, 4] since all clbits are in the circuit
// and the circuit has 2 anonymous clbits
qk_classical_register_free(cr);
qk_circuit_free(qc);Sicherheit
Das Verhalten ist undefiniert, wenn:
cregist kein gültiger, nicht-null-Zeiger auf einQkClassicalRegister.circuitist kein gültiger, nicht-null-Zeiger auf einQkCircuit.cregenthält ein oder mehrere Bits undout_bitsist kein ausgerichteter, nicht-Null-Zeiger auf ein Array mit mindestensqk_classical_register_num_bits(creg)Elementen.
Parameter
- creg – Ein Zeiger auf das klassische Register, das abgebildet werden soll.
- circuit – Ein Zeiger auf den Schaltkreis, der die clbits enthält.
- out_bits – Ein Zeiger auf ein Array, in das die zugeordneten Indizes geschrieben werden.
cregDas Array muss vorab mit mindestensqk_classical_register_num_bitsElementen für zugewiesen werden. Jedes Element enthält entweder den Schaltkreis-Bit-Index oderUINT32_MAXden Wert „“, falls das clbit nicht im Schaltkreis enthalten ist.