vector 从前往后删除
时间: 2023-09-29 16:09:58 浏览: 74
要从vector中从前往后删除元素,可以使用erase函数结合迭代器来实现。以下是一个示例代码:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
// 从前往后删除元素
while (!nums.empty()) {
nums.erase(nums.begin());
}
// 输出删除后的vector
for (const auto& num : nums) {
std::cout << num << " ";
}
return 0;
}
```
上述代码中,我们使用了一个while循环来不断地删除vector的第一个元素,直到vector为空。最后,我们遍历并输出删除后的vector,可以看到已经没有元素了。
请注意,这种方法会逐个删除元素,因此在每次删除时,后面的元素会向前移动,效率较低。如果需要频繁删除元素,建议使用其他数据结构,如list或deque。
相关问题
编写完整的C++语言程序完成下列实验任 务: 1、定义一个两栈共享空间的类,实现以下操作:插入、删除、判断某个栈是否栈空、读取某个栈栈顶元素。 要求实现完整程序◇有必要的结果输出。两个栈中元素值和个数自定。
在C++中,你可以创建一个名为`SharedStack`的类,通过共享一个底层数组来实现两个栈。以下是完整的C++代码示例:
```cpp
#include <iostream>
#include <vector>
class SharedStack {
private:
std::vector<int> data;
int top; // 栈顶指针,分别对应于两个栈
public:
// 初始化大小为n的栈
SharedStack(int n) : data(n * 2), top(0) {}
// 插入元素到第一个栈(从后向前)
void pushFirst(int value) {
if (top + 1 == data.size()) {
std::cout << "Error: Stack overflow\n";
return;
}
data.push_back(value);
top++;
}
// 插入元素到第二个栈(从前往后)
void pushSecond(int value) {
if (top + 1 == data.size()) {
std::cout << "Error: Stack overflow\n";
return;
}
data.insert(data.begin(), value);
top++;
}
// 删除并返回第一个栈的栈顶元素(如果栈不为空)
int popFirst() {
if (isEmptyFirst()) {
std::cout << "Error: Stack underflow\n";
return -1;
}
int value = data[top];
data.pop_back();
top--;
return value;
}
// 删除并返回第二个栈的栈顶元素(如果栈不为空)
int popSecond() {
if (isEmptySecond()) {
std::cout << "Error: Stack underflow\n";
return -1;
}
int value = data[0];
data.erase(data.begin());
top--;
return value;
}
// 判断第一个栈是否为空
bool isEmptyFirst() const { return top == 0; }
// 判断第二个栈是否为空
bool isEmptySecond() const { return top == data.size() / 2; }
// 读取第一个栈的栈顶元素(如果栈不为空),返回但不删除
int peekFirst() {
if (isEmptyFirst()) {
std::cout << "Error: Stack is empty\n";
return -1;
}
return data[top];
}
// 读取第二个栈的栈顶元素(如果栈不为空),返回但不删除
int peekSecond() {
if (isEmptySecond()) {
std::cout << "Error: Stack is empty\n";
return -1;
}
return data[0];
}
// 打印当前状态
void display() {
std::cout << "Stack 1: ";
for (int i = top; i < data.size(); ++i) {
std::cout << data[i] << " ";
}
std::cout << "\nStack 2: ";
for (int i = 0; i < data.size() / 2; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
SharedStack stack(5); // 创建一个大小为5的共享栈
stack.pushFirst(1);
stack.pushFirst(2);
stack.pushSecond(3);
stack.pushSecond(4);
stack.display();
stack.popFirst();
stack.popSecond();
stack.display();
return 0;
}
```
这个程序首先创建了一个`SharedStack`实例,并对两个栈进行了一些操作。注意,这只是一个基本的实现,实际应用中可能需要添加更多的错误检查和边界条件处理。
阅读全文
相关推荐









