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 매개변수는 문자열 끝에 유효한 널 종결자가 포함된 메모리에 대한 포인터여야 합니다. 또한 널 종결자까지 포함한 바이트의 읽기에도 유효해야 합니다.
매개변수
- 숫자_큐비트 - 레지스터를 생성할 큐비트 수입니다
- 이름 - 생성된 레지스터의 이름 문자열입니다. 이름은 유효한 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);안전
다음과 같은 경우 동작이 정의되지 않습니다:
qreg는QkQuantumRegister.을 가리키는 유효하고 null이 아닌 포인터가 아닙니다.circuit는QkCircuit.을 가리키는 유효하고 null이 아닌 포인터가 아닙니다.qreg하나 이상의 비트가 설정되어 있으며out_bits, 개 이상의qk_quantum_register_num_bits(qreg)요소를 가진 배열을 가리키는 정렬되지 않은, null이 아닌 포인터가 아닙니다.
매개변수
- qreg – 매핑할 양자 레지스터에 대한 포인터.
- 회로 – 큐비트가 포함된 회로를 가리키는 포인터.
- out_bits – 매핑된 인덱스가 기록될 배열을 가리키는 포인터입니다.
qreg배열은 에 대해 최소qk_quantum_register_num_bits개의 요소를 미리 할당해야 합니다. 각 요소에는 회로 비트 인덱스가 포함되거나,UINT32_MAX큐비트가 회로에 속하지 않는 경우에는 가 포함됩니다.