【发布时间】:2021-04-02 13:29:54
【问题描述】:
我想向 C++ STL 向量添加一个元素,然后返回它的地址。也许这不是“安全的”或可能的?如果这是一件合理的事情,那我就没有运气了。
struct myStruct{...};
myStruct *myMethod() {
myStruct myS(...);
myVector.push_back(myS);
// I cannot get the following line or any variant thereof to compile
myStruct *foo = myVector.rebegin(); // or .rend()-1; or &myVector.rebegin();
return foo; }
正如我所说,我想做的事情是不合逻辑还是违法的,如果不是,我该怎么做?我不想使用 myS 的地址,因为它在堆栈上,而且我无法将其设为静态,因为我每次通过该方法都对其进行重新参数化。
谢谢, 查尔斯
【问题讨论】:
-
myVector的范围是什么?你对vector<myStruct>::iterator有什么看法? -
@JaMiT 的链接我认为回答了我的问题。我想也许我不想/“不能”这样做,因为对向量的添加可能会移动东西,所以地址可能会变得不可预测地无效。同意?不同意?
-
@Beta myVector 处于班级级别,我没有任何反对意见。例如, rbegin() 不返回一个 vector
::iterator 吗? -
我想我需要将向量重新做为 ,分配一个新元素,并在运行结束时将其删除。
-
仅仅因为你可以并不意味着你应该。如果您的设计需要这样做,那么您可能应该仔细研究一下并考虑修改它。您还没有真正说明为什么需要这个,所以我想知道我们是否正在研究 XY 问题。