QkQuantumRegister
typedef struct QkQuantumRegister QkQuantumRegisterEine 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 normalerweise auch beibehalten, wenn der Schaltkreis in andere Sprachen exportiert wird.
Sie können ein Register erstellen, indem Sie zum Beispiel qk_quantum_register_new() aufrufen:
#include <qiskit.h>
QkQuantumRegister *qreg = qk_quantum_register_new(5, "my_qreg");Dadurch wird ein neues 5-Qubit-Register mit dem Namen "my_qreg" erstellt.
Zum Hinzufügen des Registers zu einer Schaltung verwenden Sie dann die Funktion 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); // 5Während die Schaltungen die Register nachverfolgen, bewirken die Register selbst fast keine Verhaltensunterschiede bei den Schaltungen.
Funktionen
qk_quantum_register_new
QkQuantumRegister *qk_quantum_register_new(uint32_t num_qubits, const char *name)
Konstruieren Sie ein neues eigenes Quantenregister mit einer bestimmten Anzahl von Qubits und einem bestimmten Namen
Beispiel
QkQuantumRegister *qr = qk_quantum_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_qubits - Die Anzahl der Qubits, 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_quantum_register_free
void qk_quantum_register_free(QkQuantumRegister *reg)
Geben Sie ein Quantenregister frei.
Beispiel
QkQuantumRegister *qr = qk_quantum_register_new(1024, "qreg");
qk_quantum_register_free(qr);Sicherheit
Das Verhalten ist undefiniert, wenn reg nicht entweder null oder ein gültiger Zeiger auf eine QkQuantumRegister ist.
Parameter
- reg - Ein Zeiger auf das freizugebende Register.
qk_quantum_register_name
char *qk_quantum_register_name(const QkQuantumRegister *qreg)
Den Namen eines Quantenregisters abrufen.
Gibt einen neu zugewiesenen C-String zurück, der den Namen des Quantenregisters enthält.
Beispiel
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);Sicherheit
QkQuantumRegisterDas Verhalten ist nicht definiert, wenn qreg kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- qreg – Ein Zeiger auf das Quantenregister.
Rückgabe
Ein Zeiger auf eine neu zugewiesene, null-terminierte Zeichenkette, die den Namen des Registers enthält. Der Aufrufer muss diese Zeichenkette mit qk_str_free… freigeben.
qk_quantum_register_num_bits
size_t qk_quantum_register_num_bits(const QkQuantumRegister *qreg)
Ermitteln Sie die Anzahl der Bits in einem Quantenregister.
Gibt die Größe (Anzahl der Bits) des Quantenregisters zurück.
Beispiel
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);Sicherheit
QkQuantumRegisterDas Verhalten ist nicht definiert, wenn qreg kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- qreg – Ein Zeiger auf das Quantenregister.
Rückgabe
Die Anzahl der Bits im Register.
qk_quantum_register_circuit_bits
void qk_quantum_register_circuit_bits(const QkQuantumRegister *qreg, const QkCircuit *circuit, uint32_t *out_bits)
Rufe die Schaltkreis-Bit-Indizes für alle Qubits in einem Quantenregister ab.
Gibt eine Zuordnung von jedem Qubit im Quantenregister zu seinem entsprechenden Index in der Qubit-Liste des Schaltkreises aus. UINT32_MAXIst ein Qubit aus dem Register nicht in der Schaltung vorhanden, lautet sein Index in der Zuordnung.
Beispiel
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);Sicherheit
Das Verhalten ist undefiniert, wenn:
qregist kein gültiger, nicht-null-Zeiger auf einQkQuantumRegister.circuitist kein gültiger, nicht-null-Zeiger auf einQkCircuit.qregenthält ein oder mehrere Bits undout_bitsist kein ausgerichteter, nicht-Null-Zeiger auf ein Array mit mindestensqk_quantum_register_num_bits(qreg)Elementen.
Parameter
- qreg – Ein Zeiger auf das zu abgebildende Quantenregister.
- Schaltung – Ein Zeiger auf die Schaltung, die die Qubits enthält.
- out_bits – Ein Zeiger auf ein Array, in das die zugeordneten Indizes geschrieben werden.
qregDas Array muss vorab mit mindestensqk_quantum_register_num_bitsElementen für zugewiesen werden. Jedes Element enthält entweder den Schaltkreis-Bit-Index oderUINT32_MAX, falls das Qubit nicht im Schaltkreis enthalten ist.