cuốn sách gpt4 ai đã làm

Tạo trình vòng lặp khóa bản đồ STL

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 18:36:17 25 4
mua khóa gpt4 Nike

Thông thường bạn có một cái gì đó như bản đồ Một bản đồ trong đó các khóa là tên của các giá trị được ánh xạ và bạn cần có API để cho phép người tiêu dùng nhìn thấy tất cả các tên... chẳng hạn như để điền vào hộp danh sách GUI. Bạn có thể tạo một vectơ và trả về dưới dạng lệnh gọi API, nhưng cách này không hiệu quả. Bạn chỉ có thể trả về một tham chiếu đến bản đồ, nhưng sau đó bạn cũng sẽ có quyền truy cập vào các giá trị mà bạn có thể không muốn.

Vậy làm cách nào để bạn viết một lớp KeyIterator tương thích bao bọc một bản đồ và cung cấp quyền truy cập trình vòng lặp tiêu chuẩn vào các khóa trong bản đồ đó.

Ví dụ:

bản đồ m= ...
KeyIteratorki(m);
for(KeyIterator::iterator it=ki.begin();it!=ki.end();++it)
cout << *nó;

KeyIterator phải nhẹ để bạn có thể trả về nó từ các phương thức với ít chi phí hoạt động.

biên tập:Tôi không chắc mình đã giải thích nó một cách hoàn hảo hay chưa, hãy để tôi đưa ra trường hợp sử dụng tốt hơn (bán giả):

lớp PersonManager
{
private:
bản đồ người;
public:
// phiên bản này phải lặp lại bản đồ, xây dựng cấu trúc mới và trả về một bản sao
vector getNamesStandard();

// phiên bản này trả về một vùng chứa nhẹ có thể lặp lại
// và trực tiếp bao bọc bản đồ, cho phép truy cập vào các phím
KeyIterator getNames();
};

void PrintNames(PersonManager &pm)
{
KeyIterator tên = pm.getNames();
for(KeyIterator::iterator it=names.begin();it!=names.end();++it)
cout << *it << endl;
}

câu trả lời hay nhất

#include 
#include
#include

mẫu
classKeyIterator {
tên bản đồ::const_iterator iter_;
public:
KeyIterator() {}
KeyIterator(tên kiểu bản đồ::iterator iter) :iter_(iter) {}
KeyIterator(tên kiểu bản đồ::const_iterator iter) :iter_(iter) {}
KeyIterator(const KeyIterator& b) :iter_(b.iter_) {}
KeyIterator& operator=(const KeyIterator& b) {iter_ = b.iter_; return *this;}
KeyIterator& operator++() {++iter_; return *this;}
Toán tử KeyIterator++(int) {return KeyIterator(iter_++);}
const typename map::key_type& operator*() {return iter_->first;}
toán tử bool==(const KeyIterator& b) {return iter_==b.iter_;}
toán tử bool!=(const KeyIterator& b) {return iter_!=b.iter_;}
};

int chính() {
std::map m;
KeyIterator<> > ki;
for(ki=m.begin(); ki!=m.end(); ++ki)
cout << *ki;
}

http://codepad.org/4wxFGGNV
Nó không thể nhẹ hơn thế này được. Tuy nhiên, nó yêu cầu trình vòng lặp phải dựa trên bản đồ Các loại thay vì loại khóa được tạo khuôn mẫu, có nghĩa là nếu bạn cố gắng ẩn cấu trúc bên trong, bạn phải cung cấp một số chi tiết triển khai.

Về c++ - tạo trình vòng lặp khóa bản đồ STL, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/7667343/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress