Arm*_*yan 12 c++ stack stl vector
标准是否保证以下代码可以工作(假设st不为空)?
#include <vector>
#include <stack>
int main()
{
extern std::stack<int, std::vector<int> > st;
int* end = &st.top() + 1;
int* begin = end - st.size();
std::vector<int> stack_contents(begin, end);
}
Run Code Online (Sandbox Code Playgroud)
是.
std::stack
只是一个容器适配器.
你可以看到它.top()
实际上是(§23.3.5.3.1)
reference top() { return c.back(); }
Run Code Online (Sandbox Code Playgroud)
c
容器在哪里,在这种情况下是一个std::vector
这意味着您的代码基本上被翻译成:
extern std::vector<int> st;
int* end = &st.back() + 1;
int* begin = end - st.size();
std::vector<int> stack_contents(begin, end);
Run Code Online (Sandbox Code Playgroud)
并且std::vector
保证是连续的,应该没有问题.
但是,这并不意味着这是一个好主意.如果你需要使用这样的"黑客",它通常是糟糕设计的一个指标.你可能想std::vector
从头开始使用.
归档时间: |
|
查看次数: |
7516 次 |
最近记录: |