QkClassicalRegister
typedef struct QkClassicalRegister QkClassicalRegister한 번에 여러 비트를 인스턴스화하는 일반적인 방법은 레지스터를 만드는 것입니다. 레지스터는 비트의 명명된 컬렉션입니다. 레지스터를 생성하면 비트 모음에 이름을 지정할 수 있으며, 이는 회로의 특정 비트에 대한 메타데이터로 사용할 수 있습니다. 이 이름은 일반적으로 회로를 교환 언어로 내보낼 때에도 유지됩니다.
예를 들어 qk_classical_register_new() 으로 전화하여 등록을 만들 수 있습니다:
#include <qiskit.h>
QkClassicalRegister *creg = qk_classical_register_new(5, "my_creg");그러면 "my_creg" 이라는 새로운 5개의 클래식 비트 레지스터가 생성됩니다.
그런 다음 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); // 5회로는 레지스터를 추적하지만, 레지스터 자체는 회로에 거의 동작상의 차이를 주지 않습니다.
함수
qk_classical_register_new
QkClassicalRegister *qk_classical_register_new(uint32_t num_clbits, const char *name)
주어진 클릿 수와 이름으로 새로운 소유 클래식 레지스터를 생성합니다
예
QkClassicalRegister *cr = qk_classical_register_new(5, "five_qubits");안전
name 매개변수는 문자열 끝에 유효한 널 종결자가 포함된 메모리에 대한 포인터여야 합니다. 또한 널 종결자까지 포함한 바이트의 읽기에도 유효해야 합니다.
매개변수
- 숫자_클릭비트 - 레지스터를 생성할 클릭비트 수입니다
- 이름 - 생성된 레지스터의 이름 문자열입니다. 이름은 유효한 UTF-8 문자로 구성되어야 합니다.
리턴
생성된 레지스터에 대한 포인터
qk_classical_register_free
void qk_classical_register_free(QkClassicalRegister *reg)
클래식 레지스터를 무료로 제공합니다.
예
QkClassicalRegister *cr = qk_classical_register_new(1024, "creg");
qk_classical_register_free(cr);안전
reg 이 null이 아니거나 QkClassicalRegister 에 대한 유효한 포인터가 아닌 경우 동작이 정의되지 않습니다.
매개변수
- reg - 무료 레지스터에 대한 포인터입니다.
qk_classical_register_name
char *qk_classical_register_name(const QkClassicalRegister *creg)
클래식 레지스터의 이름을 가져옵니다.
클래식 레지스터의 이름을 포함하는 새로 할당된 C 문자열을 반환합니다.
예
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);안전
QkClassicalRegister가 에 대한 유효하고 null이 아닌 포인터가 아닌 경우 creg , 동작은 정의되지 않습니다.
매개변수
- creg – 클래식 레지스터를 가리키는 포인터.
리턴
레지스터 이름을 포함하는, 새로 할당된 널 종료 문자열을 가리키는 포인터. qk_str_free호출자는.을 사용하여 이 문자열을 해제해야 합니다.
qk_classical_register_num_bits
size_t qk_classical_register_num_bits(const QkClassicalRegister *creg)
고전적 레지스터에 포함된 고전적 비트의 개수를 구합니다.
클래식 레지스터의 크기(클래식 비트 수)를 반환합니다.
예
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);안전
QkClassicalRegister가 에 대한 유효하고 null이 아닌 포인터가 아닌 경우 creg , 동작은 정의되지 않습니다.
매개변수
- creg – 클래식 레지스터를 가리키는 포인터.
리턴
레지스터에 포함된 클래식 비트의 수.
qk_classical_register_circuit_bits
void qk_classical_register_circuit_bits(const QkClassicalRegister *creg, const QkCircuit *circuit, uint32_t *out_bits)
고전적 레지스터에 포함된 모든 clbit에 대한 회로 비트 인덱스를 가져옵니다.
고전적 레지스터의 각 clbit에 대해, 회로의 clbit 목록에서 해당 clbit에 대응하는 인덱스로의 매핑을 출력합니다. UINT32_MAX레지스터의 clbit이 회로에 존재하지 않는 경우, 매핑 내에서의 해당 인덱스는 가 됩니다.
예
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);안전
다음과 같은 경우 동작이 정의되지 않습니다:
creg는QkClassicalRegister.을 가리키는 유효하고 null이 아닌 포인터가 아닙니다.circuit는QkCircuit.을 가리키는 유효하고 null이 아닌 포인터가 아닙니다.creg하나 이상의 비트가 설정되어 있으며out_bits, 개 이상의qk_classical_register_num_bits(creg)요소를 가진 배열을 가리키는 정렬된 비-null 포인터가 아닙니다.
매개변수
- creg – 매핑할 클래식 레지스터를 가리키는 포인터.
- circuit – clbits가 포함된 회로에 대한 포인터입니다.
- out_bits – 매핑된 인덱스가 기록될 배열을 가리키는 포인터입니다.
creg배열은 에 대해 최소qk_classical_register_num_bits개의 요소를 미리 할당해야 합니다. 각 요소에는 회로 비트 인덱스가 포함되거나,UINT32_MAXclbit이 해당 회로에 없는 경우에는 가 포함됩니다.