QContiguousCache Class

template <typename T> class QContiguousCache

QContiguousCache 클래스는 연속 캐시를 제공하는 템플릿 클래스입니다. 더 보기...

헤더: #include <QContiguousCache>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

참고: 이 클래스의 모든 함수는 재진입됩니다.

공용 함수

QContiguousCache(qsizetype capacity = 0)
QContiguousCache(const QContiguousCache<T> &other)
~QContiguousCache()
void append(const T &value)
bool areIndexesValid() const
const T &at(qsizetype i) const
qsizetype available() const
qsizetype capacity() const
void clear()
bool containsIndex(qsizetype i) const
qsizetype count() const
T &first()
const T &first() const
qsizetype firstIndex() const
void insert(qsizetype i, const T &value)
bool isEmpty() const
bool isFull() const
T &last()
const T &last() const
qsizetype lastIndex() const
void normalizeIndexes()
void prepend(const T &value)
void removeFirst()
void removeLast()
void setCapacity(qsizetype size)
qsizetype size() const
void swap(QContiguousCache<T> &other)
T takeFirst()
T takeLast()
bool operator!=(const QContiguousCache<T> &other) const
QContiguousCache<T> &operator=(QContiguousCache<T> &&other)
QContiguousCache<T> &operator=(const QContiguousCache<T> &other)
bool operator==(const QContiguousCache<T> &other) const
T &operator[](qsizetype i)
const T &operator[](qsizetype i) const

상세 설명

QContiguousCache 클래스는 사용자 인터페이스 보기에 표시할 항목을 효율적으로 캐싱하는 방법을 제공합니다. QCache 과 달리 캐시 내의 요소가 연속적이어야 한다는 제한을 추가합니다. 이는 현재 스크롤된 위치를 중심으로 지역화된 행 집합으로서 사용자 인터페이스 보기가 가장 일반적으로 데이터를 요청하는 방식과 일치한다는 이점이 있습니다. 이 제한으로 인해 캐시는 QCache 보다 메모리와 프로세서 주기를 덜 소비할 수 있습니다.

QContiguousCache는 setCapacity()로 설정하거나 생성자에 매개변수로 전달된 고정 용량으로 작동합니다. 이 용량은 캐시 자체의 메모리 사용 상한선이며 요소 자체에 할당된 메모리는 포함되지 않습니다. 용량이 0(기본값)인 캐시는 항목이 저장되지 않음을 의미하므로 insert(), append() 및 prepend() 작업은 사실상 무효화됩니다. 따라서 캐시에 항목을 추가하기 전에 용량을 적절한 값으로 설정하는 것이 중요합니다.

연속 캐시를 사용하는 가장 간단한 방법은 append() 및 prepend()를 사용하는 것입니다.

MyRecord record(int row) const
{
    Q_ASSERT(row >= 0 && row < count());

    while (row > cache.lastIndex())
        cache.append(slowFetchRecord(cache.lastIndex()+1));
    while (row < cache.firstIndex())
        cache.prepend(slowFetchRecord(cache.firstIndex()-1));

    return cache.at(row);
}

캐시가 가득 차면 새 항목이 추가되거나 추가된 곳의 캐시 반대쪽 끝에 있는 항목이 제거됩니다.

요청된 행이 현재 캐시된 항목에서 멀리 떨어져 있는 경우 insert() 함수를 사용하면 이 사용법을 더욱 최적화할 수 있습니다. 새 항목이 삽입되는 위치와 현재 캐시된 항목 사이에 간격이 있는 경우 캐시의 연속성을 유지하기 위해 기존 캐시된 항목이 먼저 제거됩니다. 따라서 insert()를 사용할 때는 원치 않는 캐시 지우기를 피하기 위해 약간의 주의를 기울이는 것이 중요합니다.

QContiguousCache 클래스에 유효한 인덱스의 범위는 0에서 INT_MAX까지입니다. prepend ()를 호출하여 첫 번째 인덱스가 0보다 작아지거나 append()를 호출하여 마지막 인덱스가 INT_MAX보다 커지면 캐시의 인덱스가 무효화될 수 있습니다. 캐시 인덱스가 유효하지 않은 경우 containsIndex(), firstIndex(), lastIndex(), at() 또는 operator[]() 중 하나를 호출하기 전에 normalizeIndexes()를 호출하는 것이 중요합니다. 캐시에 유효하지 않은 인덱스가 있을 때 이러한 함수를 호출하면 정의되지 않은 동작이 발생합니다. 인덱스는 areIndexesValid()를 사용하여 확인할 수 있습니다.

대부분의 경우 인덱스는 0에서 INT_MAX를 초과하지 않으며 normalizeIndexes()는 사용할 필요가 없습니다.

인접 캐시 예시를 참조하세요.

멤버 함수 문서

[explicit] QContiguousCache::QContiguousCache(qsizetype capacity = 0)

주어진 capacity 로 캐시를 구축합니다.

setCapacity()도 참조하세요 .

QContiguousCache::QContiguousCache(const QContiguousCache<T> &other)

other 의 복사본을 생성합니다.

이 작업은 QContiguousCache가 암시적으로 공유되기 때문에 일정한 시간이 걸립니다. 따라서 함수에서 QContiguousCache를 반환하는 속도가 매우 빠릅니다. 공유 인스턴스가 수정되면 복사(쓰기 시 복사)되므로 선형 시간이 걸립니다.

operator=()도 참조하세요 .

QContiguousCache::~QContiguousCache()

캐시를 삭제합니다.

void QContiguousCache::append(const T &value)

캐시 끝에 value 을 삽입합니다. 캐시가 이미 가득 차면 캐시 시작 부분의 항목이 제거됩니다.

prepend(), insert() 및 isFull()도 참조하세요 .

bool QContiguousCache::areIndexesValid() const

캐시에 저장된 항목의 인덱스가 유효한지 여부를 반환합니다. 인덱스 위치 INT_MAX 뒤에 항목이 추가되거나 인덱스 위치 0 앞에 항목이 추가되면 인덱스가 유효하지 않게 될 수 있습니다. 이는 인접 캐시를 매우 오래 사용하는 순환 버퍼 스타일에서만 발생할 것으로 예상됩니다. normalizeIndexes ()를 호출하여 인덱스를 다시 유효하게 만들 수 있습니다.

normalizeIndexes(), append(), prepend()도 참조하세요 .

const T &QContiguousCache::at(qsizetype i) const

캐시에서 인덱스 위치 i 에 있는 항목을 반환합니다. i 은 캐시에서 유효한 인덱스 위치여야 합니다(즉, firstIndex() <= i <= lastIndex()).

캐시의 인덱스는 캐시에 추가된 첫 번째 항목에서 해당 항목의 위치 수를 나타냅니다. 즉, 용량이 100인 캐시에 150개의 항목이 추가된 경우 유효한 인덱스 범위는 50~149입니다. 이를 통해 이론적으로 무한한 목록을 기반으로 캐시에 항목을 삽입하고 검색할 수 있습니다.

firstIndex(), lastIndex(), insert() 및 operator[]()도 참조하세요 .

qsizetype QContiguousCache::available() const

캐시가 가득 차기 전에 캐시에 추가할 수 있는 항목 수를 반환합니다.

size(), capacity() 및 isFull()도 참조하세요 .

qsizetype QContiguousCache::capacity() const

캐시가 가득 차기 전까지 캐시에 저장할 수 있는 항목 수를 반환합니다. 캐시에 용량과 동일한 수의 항목이 포함되어 있는 경우 새 항목을 추가하면 추가된 항목에서 가장 먼 항목이 제거됩니다.

setCapacity() 및 size()도 참조하세요 .

void QContiguousCache::clear()

캐시에서 모든 항목을 제거합니다. 용량은 변경되지 않습니다.

bool QContiguousCache::containsIndex(qsizetype i) const

캐시의 인덱스 범위에 지정된 인덱스가 포함된 경우 true 를 반환합니다 i.

firstIndex() 및 lastIndex()도 참조하세요 .

qsizetype QContiguousCache::count() const

size()와 동일합니다.

T &QContiguousCache::first()

캐시의 첫 번째 항목에 대한 참조를 반환합니다. 이 함수는 캐시가 비어 있지 않다고 가정합니다.

last() 및 isEmpty()도 참조하세요 .

const T &QContiguousCache::first() const

과부하가 걸린 기능입니다.

qsizetype QContiguousCache::firstIndex() const

캐시에서 유효한 첫 번째 인덱스를 반환합니다. 캐시가 비어 있으면 인덱스가 유효하지 않습니다.

capacity(), size() 및 lastIndex()도 참조하세요 .

void QContiguousCache::insert(qsizetype i, const T &value)

인덱스 위치 ivalue 을 삽입합니다. 캐시에 이미 i 에 항목이 포함되어 있으면 해당 값이 대체됩니다. ilastIndex() 보다 하나 많거나 firstIndex() 보다 하나 적으면 append() 또는 prepend()와 동일합니다.

주어진 인덱스 i 가 캐시의 현재 범위 내에 있지 않거나 캐시 인덱스 범위의 경계에 인접하지 않은 경우 항목을 삽입하기 전에 먼저 캐시가 지워집니다. 이 시점에서 캐시의 크기는 1이 됩니다. 캐시의 현재 인덱스 범위에서 인접한 순서로 항목을 삽입하는 것이 좋습니다.

QContiguousCache 클래스의 유효한 인덱스 범위는 0에서 INT_MAX까지입니다. 이 범위를 벗어나 삽입하면 정의되지 않은 동작이 발생합니다.

prepend(), append(), isFull(), firstIndex() 및 lastIndex()도 참조하세요 .

bool QContiguousCache::isEmpty() const

캐시 내에 저장된 항목이 없으면 true 을 반환합니다.

size() 및 capacity()도 참조하세요 .

bool QContiguousCache::isFull() const

캐시 내에 저장된 항목 수가 캐시 용량과 같으면 true 을 반환합니다.

size() 및 capacity()도 참조하세요 .

T &QContiguousCache::last()

캐시의 마지막 항목에 대한 참조를 반환합니다. 이 함수는 캐시가 비어 있지 않다고 가정합니다.

first() 및 isEmpty()도 참조하세요 .

const T &QContiguousCache::last() const

과부하가 걸린 기능입니다.

qsizetype QContiguousCache::lastIndex() const

캐시에서 마지막으로 유효한 인덱스를 반환합니다. 캐시가 비어 있으면 인덱스가 유효하지 않습니다.

capacity(), size(), firstIndex()도 참조하세요 .

void QContiguousCache::normalizeIndexes()

캐시의 첫 번째 인덱스와 마지막 인덱스가 유효한 인덱스를 가리키도록 이동합니다. 이 함수는 캐시 내용이나 캐시 내 요소의 순서를 수정하지 않습니다.

이 함수는 캐시를 순환 버퍼로 사용할 때 인덱스 오버플로를 수정할 수 있도록 제공됩니다.

QContiguousCache<int> cache(10);
cache.insert(INT_MAX, 1); // cache contains one value and has valid indexes, INT_MAX to INT_MAX
cache.append(2); // cache contains two values but does not have valid indexes.
cache.normalizeIndexes(); // cache has two values, 1 and 2.  New first index will be in the range of 0 to capacity().

areIndexesValid(), append(), prepend()도 참조하세요 .

void QContiguousCache::prepend(const T &value)

캐시 시작 부분에 value 을 삽입합니다. 캐시가 이미 가득 차면 캐시 끝에 있는 항목이 제거됩니다.

append(), insert() 및 isFull()도 참조하세요 .

void QContiguousCache::removeFirst()

캐시에서 첫 번째 항목을 제거합니다. 이 함수는 캐시가 비어 있지 않다고 가정합니다.

removeLast()도 참조하세요 .

void QContiguousCache::removeLast()

캐시에서 마지막 항목을 제거합니다. 이 함수는 캐시가 비어 있지 않다고 가정합니다.

removeFirst()도 참조하세요 .

void QContiguousCache::setCapacity(qsizetype size)

캐시의 용량을 주어진 size 으로 설정합니다. 캐시에는 용량과 동일한 수의 항목을 저장할 수 있습니다. 캐시에 항목을 삽입, 추가 또는 앞에 추가할 때 캐시가 이미 가득 차면 추가된 항목에서 가장 먼 항목이 제거됩니다.

지정된 size 이 캐시의 현재 항목 수보다 작으면 캐시의 마지막 size 항목만 남게 됩니다.

capacity() 및 isFull()도 참조하세요 .

qsizetype QContiguousCache::size() const

캐시 내에 포함된 항목의 수를 반환합니다.

capacity()도 참조하세요 .

[noexcept] void QContiguousCache::swap(QContiguousCache<T> &other)

이 캐시를 other 로 바꿉니다. 이 작업은 매우 빠르며 실패하지 않습니다.

T QContiguousCache::takeFirst()

캐시에서 첫 번째 항목을 제거하고 반환합니다. 이 함수는 캐시가 비어 있지 않다고 가정합니다.

반환 값을 사용하지 않는 경우 removeFirst()를 사용하는 것이 더 효율적입니다.

takeLast() 및 removeFirst()도 참조하세요 .

T QContiguousCache::takeLast()

캐시에서 마지막 항목을 제거하고 반환합니다. 이 함수는 캐시가 비어 있지 않다고 가정합니다.

반환 값을 사용하지 않는 경우 removeLast()를 사용하는 것이 더 효율적입니다.

takeFirst() 및 removeLast()도 참조하세요 .

bool QContiguousCache::operator!=(const QContiguousCache<T> &other) const

other 이 이 캐시와 같지 않으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

두 캐시가 동일한 인덱스에 동일한 값을 포함하면 동일한 것으로 간주됩니다. 이 함수는 operator==() 을 구현하기 위한 값 유형이 필요합니다.

operator==()도 참조하세요 .

[noexcept] QContiguousCache<T> &QContiguousCache::operator=(QContiguousCache<T> &&other)

이동-이 other 인스턴스를 QContiguousCache 인스턴스에 할당합니다.

QContiguousCache<T> &QContiguousCache::operator=(const QContiguousCache<T> &other)

이 캐시에 other 을 할당하고 이 캐시에 대한 참조를 반환합니다.

bool QContiguousCache::operator==(const QContiguousCache<T> &other) const

other 이 이 캐시와 같으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

두 캐시가 동일한 인덱스에 동일한 값을 포함하면 동일한 것으로 간주됩니다. 이 함수는 operator==() 을 구현하기 위한 값 유형이 필요합니다.

operator!=()도 참조하세요 .

T &QContiguousCache::operator[](qsizetype i)

인덱스 위치 i 에 있는 항목을 수정 가능한 참조로 반환합니다. 캐시에 지정된 인덱스 위치 i 에 항목이 없는 경우 먼저 해당 위치에 빈 항목을 삽입합니다.

대부분의 경우 at() 또는 insert()를 사용하는 것이 좋습니다.

참고: 연산자[]의 컨스트가 아닌 오버로드를 사용하려면 QContiguousCache 을 사용하여 딥 카피를 만들어야 합니다. 참조가 아닌 QContiguousCache 에 대한 읽기 전용 액세스에는 at()를 사용합니다.

insert() 및 at()도 참조하세요 .

const T &QContiguousCache::operator[](qsizetype i) const

이 함수는 과부하된 함수입니다.

at(i)와 동일합니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.