C++容器stack
·
定义
- 一种遵循后进先出(LIFO)原则的容器适配器。它基于其他序列容器实现,默认情况下使用
deque作为底层容器- 栈顶进,栈顶出
- 不支持迭代
构造函数
默认构造函数
int main()
{
system("chcp 65001");
stack<std::u8string> stk;
stk.push(u8"北京");
stk.push(u8"上海");
while (!stk.empty())
{
cout << getStringFromU8string(stk.top()) << endl;
stk.pop();
}
}
拷贝构造函数
int main()
{
system("chcp 65001");
stack<std::u8string> stk1;
stk1.push(u8"北京");
stk1.push(u8"上海");
stack<std::u8string> stk2(stk1);
while (!stk1.empty())
{
cout << "stk1" << getStringFromU8string(stk1.top()) << endl;
stk1.pop();
}
while (!stk2.empty())
{
cout << "stk2" << getStringFromU8string(stk2.top()) << endl;
stk2.pop();
}
}
移动构造函数
int main()
{
system("chcp 65001");
stack<std::u8string> stk1;
stk1.push(u8"北京");
stk1.push(u8"上海");
stack<std::u8string> stk2(std::move(stk1));
while (!stk1.empty())
{
cout << "stk1" << getStringFromU8string(stk1.top()) << endl;
stk1.pop();
}
while (!stk2.empty())
{
cout << "stk2" << getStringFromU8string(stk2.top()) << endl;
stk2.pop();
}
}
用底层容器构造函数
int main()
{
system("chcp 65001");
stack<std::u8string, vector<std::u8string>> stk1;
stk1.push(u8"北京");
stk1.push(u8"上海");
while (!stk1.empty())
{
cout << "stk1" << getStringFromU8string(stk1.top()) << endl;
stk1.pop();
}
}
常用函数
| 函数 | 说明 | 时间复杂度 |
|---|---|---|
void push(const T& value); |
将 value 压入栈顶(将构造好的数据的副本(或移动副本)添加到栈顶) |
O(1) |
| emplace( Args&&… args ) | 直接在栈顶位置构造元素,不需要先创建完整的对象实例 | |
void pop(); |
移除栈顶元素。注意:此函数不返回被移除的元素。 | O(1) |
T& top(); |
返回对栈顶元素的引用。在调用前必须确保栈非空! | O(1) |
const T& top() const; |
返回对栈顶元素的常量引用(用于 const 对象)。 | O(1) |
bool empty() const; |
如果栈为空,返回 true,否则返回 false。 |
O(1) |
size_t size() const; |
返回栈中元素的数量。 | O(1) |
| swap( stack& other ) | 交换内容 |
int main()
{
system("chcp 65001");
stack<std::u8string, vector<std::u8string>> stk1;
stk1.push(u8"北京");
stk1.push(u8"上海");
stack<std::u8string, vector<std::u8string>> stk2;
stk2.push(u8"张三");
std::cout << getStringFromU8string(u8"交换前:") << std::endl;
std::cout << getStringFromU8string(u8"stk1大小: ") << stk1.size() << std::endl;
std::cout << getStringFromU8string(u8"stk2大小: ") << stk2.size() << std::endl;
stk1.swap(stk2);
while (!stk1.empty())
{
cout << "stk1-> " << getStringFromU8string(stk1.top()) << endl;
stk1.pop();
}
while (!stk2.empty())
{
cout << "stk2-> " << getStringFromU8string(stk2.top()) << endl;
stk2.pop();
}
std::cout << getStringFromU8string(u8"交换后:") << std::endl;
std::cout << getStringFromU8string(u8"stk1大小: ") << stk1.size() << std::endl;
std::cout << getStringFromU8string(u8"stk2大小: ") << stk2.size() << std::endl;
}
更多推荐



所有评论(0)