【发布时间】:2019-04-28 11:31:20
【问题描述】:
我正在开发一个内存关键应用程序。我先生成一个列表,例如(C++11):
std::list<string> nodes({"Hello","Welcome", "Hi", "World"});
我现在需要使用“节点”的第二个和第三个元素创建一个较小的列表。天真地,我会这样做:
std::list<string> sub_nodes;
sub_nodes.push_back(*std::next(nodes.begin(),1));
sub_nodes.push_back(*std::next(nodes.begin(),2));
但这显然是通过分配新内存为sub_nodes 在堆中分配内存。
*(sub_nodes.begin()) = "NotWelcome"; //changing first element
std::list<string>::iterator it;
for(it=nodes.begin();it!=nodes.end();++it) cout<<*it<<'\t';
cout<<'\n';
//Hello Welcome Hi World
for(it=sub_nodes.begin();it!=sub_nodes.end();++it)
cout<<*it<<'\t';
cout<<'\n';
//NotWelcome Hi
我希望完成的是让sub_nodes 的元素占据创建它们的nodes 元素的相同地址。换句话说,我希望对sub_nodes 元素所做的更改反映在nodes 中的这些元素中,反之亦然。在 C 链表中,这将是直截了当的,因为列表节点基本上是指针。我如何在 C++ 中完成同样的任务?
【问题讨论】:
-
在 c++ 中你也可以使用指针,但最好使用智能指针
-
这是个问题。如何通过引用向 std::list 添加元素?
-
与您的问题无关,但您确定
std::list是最适合您的容器吗?你用它做什么?导致您在默认容器std::vector上使用列表的要求是什么?如果内存很重要,请注意 X 节点的std::list比 X 元素的std::vector使用 更多 内存(因为私有节点结构本身)。也许您应该改用std::deque(以获取一些列表和向量)? -
@Someprogrammerdude 因为在我的应用程序中可能会插入数据。
-
要拼接列表吗?