将 std::list 元素插入到 std::list

发布于 2024-08-22 04:09:31 字数 290 浏览 2 评论 0原文

    std::list <std::list <int>> mylist;
    std::list <int> mylist_;

    mylist_.push_back(0);
    mylist.push_back(mylist_);

是否可以在不创建 temporary 本地子列表 (mylist_) 的情况下将子列表插入到列表 (mylist) 中,并且最好使用类型(子列表)作为指针就性能而言,列出(mylist)?

    std::list <std::list <int>> mylist;
    std::list <int> mylist_;

    mylist_.push_back(0);
    mylist.push_back(mylist_);

is it possible to insert a sub-list into the list (mylist) without creating the temporary local sub-list (mylist_) and would it be better to use the type (sub-list) as pointer in list (mylist) in terms of performance?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

没有你我更好 2024-08-29 04:09:31

如果没有临时变量,你就无法真正做到这一点,但你可以更简洁地做到这一点:

mylist.push_back(std::list<int>(1, 0)); // insert 1 element with value 0

正如 JonM 指出的那样,临时变量可能会被任何像样的编译器优化掉。

您可以使用数组:

int vals[] = { 1, 2, 3, 4 };
mylist.push_back(std::list<int>(vals, vals+sizeof(vals)/sizeof(vals[0])));

诸如 Boost.Assign 缓解一下:

mylist.push_back(boost::assign::list_of(1)(2)(3));

性能方面,这取决于您想要做什么 - 例如,如果您希望列表被大量传递,请使用(最好是智能)指针来避免无休止的复制。

You can't really do it without temporaries, but you can do it more concisely:

mylist.push_back(std::list<int>(1, 0)); // insert 1 element with value 0

As JonM notes, the temporary will probably be optimized away by any decent compiler.

You can use arrays:

int vals[] = { 1, 2, 3, 4 };
mylist.push_back(std::list<int>(vals, vals+sizeof(vals)/sizeof(vals[0])));

Utilities like Boost.Assign ease that:

mylist.push_back(boost::assign::list_of(1)(2)(3));

Performance-wise it depends on what you want to do - if you e.g. expect the lists to be handed around much, use (preferrably smart) pointers to avoid endless copying.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文