C++ deque随机访问、代码练习

deque随机访问,代码见下:

#include
#include

using namespace std;

void printDeque(deque &d) {
	//for (deque::iterator iter = d.begin(); iter != d.end(); iter++) {
	//	cout << *iter << " ";
	//}
	//cout << endl;
	for (int i = 0; i < d.size(); ++i) {
		cout << d[i];
	}
	cout << endl;
}

int main() {
	
	deque d = {-1, 9, 8, 5, 2, 1, 1, -1};

	cout << d[1] << endl; //碰到异常不做bug处理
	cout << d.at(1) << endl; //碰到异常做bug处理
	return 0;

}

具体解释可见源码

C++ deque随机访问、代码练习_第1张图片

代码练习,对应力扣设计双端队列,代码见下

class MyCircularDeque {
    deque d;
    int capacity;
    int size;
public:
    MyCircularDeque(int k) {
        d.clear();
        capacity = k;
        size = 0;
    }
    
    bool insertFront(int value) {
        if(size == capacity){
            return false;
        }
        size++;
        d.push_front(value);
        return true;
    }
    
    bool insertLast(int value) {
        if(size == capacity){
            return false;
        }
        size++;
        d.push_back(value);
        return true;
    }
    
    bool deleteFront() {
        if(size == 0){
            return false;
        }
        size--;
        d.pop_front();
        return true;
    }
    
    bool deleteLast() {
        if(size == 0){
            return false;
        }
        size--;
        d.pop_back();
        return true;
    }
    
    int getFront() {
        if(size == 0) return -1;
        return d.front();
    }
    
    int getRear() {
        if(size == 0) return -1;
        return d.back();       
    }
    
    bool isEmpty() {
        return size == 0;
    }
    
    bool isFull() {
        return size == capacity;
    }
};

/**
 * Your MyCircularDeque object will be instantiated and called as such:
 * MyCircularDeque* obj = new MyCircularDeque(k);
 * bool param_1 = obj->insertFront(value);
 * bool param_2 = obj->insertLast(value);
 * bool param_3 = obj->deleteFront();
 * bool param_4 = obj->deleteLast();
 * int param_5 = obj->getFront();
 * int param_6 = obj->getRear();
 * bool param_7 = obj->isEmpty();
 * bool param_8 = obj->isFull();
 */

代码三,对应力扣,设计浏览器历史记录,代码见下

class BrowserHistory {
    deque d;
    int index;
public:
    BrowserHistory(string homepage) {
        d = {homepage};
        index = 0;
    }
    
    void visit(string url) {
        d.resize(index + 1);
        d.push_back(url);
        index = d.size() - 1;
    }
    
    string back(int steps) {
        index -= steps;
        if(index < 0 ) index = 0;
        return d[index];
    }
    
    string forward(int steps) {
        index += steps;
        if(index >= d.size()){
            index = d.size() - 1;
        }
        return d[index];
    }
};

/**
 * Your BrowserHistory object will be instantiated and called as such:
 * BrowserHistory* obj = new BrowserHistory(homepage);
 * obj->visit(url);
 * string param_2 = obj->back(steps);
 * string param_3 = obj->forward(steps);
 */

你可能感兴趣的:(c++,开发语言)