- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
std::list 的一些方法,可能还有其他 STL 容器,在 C++11 中添加了一个新的重载。我需要的是 list::splice()。一种方法采用列表&参数,另一种方法采用列表&&参数。
我想知道有什么区别,我应该更喜欢哪个。
我查看了 libstdc++(GCC 编译器使用的标准 C++ 库)的实现,它在两种情况下都在内部使用了 list&& 版本。 C++11 规范也没有说明这个问题。它只提供了 2 种方法,没有解释区别。
您不 move 列表本身,也不 move 节点(复制它们的指针似乎是将节点从一个列表 move 到另一个列表的方法),那么这有什么关系呢?我只有一个想法,也许使用 list&& 就像是对编译器的 promise ,你不再需要另一个列表,编译器可以保存一些操作,因为它不必保持另一个列表有效...
最佳答案
你应该不需要太在意。当您传递的参数是右值时,将选择带有 std::list&&
参数的重载 - 通常当它引用的对象是临时对象时。您无需明确说明要使用哪个重载。
存在这两个版本的函数的原因是为了方便,这样客户端在将临时对象传递给 splice (感谢评论中的@HowardHinnent)。
此外,当您从中拼接的列表是一个临时对象时,没有必要关心维护它的状态。函数的 &&
版本可能只是从该列表中撕掉内脏,在地板上留下一团糟。这样做可能是为了提高效率(但实际上,std::list
没有太多理由这样做)。
如果你有一个std::list
,other
,你知道你永远不会再使用,你可以自愿说“我不在乎你用它来做”,通过使用 std::move
:
l.splice(pos, std::move(other));
表达式 std::move(other)
是一个右值,因此 splice
函数会将其视为一个临时值。
关于c++ - std::list::splice, list&& VS list&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938048/
我正在使用 JavaScript splice() 方法从数组中删除一个元素。代码如下, var fruits = ["Banana", "Orange", "Apple", "Mango"]; fu
JavaScript 拼接方法实际上将数组拆分为两个,如下例所示: var a = ['a','b','c']; var b = a.splice(0,2); console.log(a); // o
我正在尝试从包含表单输入字段的数组中删除某些值: allFields = theForm.getElementsByTagName("INPUT"); for(j = 0; j =0; j--){
var arr = document.querySelectorAll("a[href*='somestring']") 返回控制台中看起来像数组的内容。方括号 [] 和 arr.length = 7
我正在尝试从 javascript 中的数组中删除特定项目,但似乎无法使 [array].splice 函数正常工作。 此代码用于检查 SVG 对象是否与另一个对象发生碰撞(对于游戏)。玩家总是希望与
所以这是一个语法问题,我一直在阅读 MDN 文档,但我找不到类似的例子。我从这里得到了这个特定的代码片段:https://bost.ocks.org/mike/shuffle/正如我正在阅读随机数组一
这个问题在这里已经有了答案: What is the difference between call and apply? (23 个回答) 关闭 8 年前。 我正在尝试将可在函数内部访问的 arg
我有一个数组,它在任何时候都可能包含以下值的任意组合: var positions = ['first', 'second', 'third', 'fourth']; 目标是重建一个 Javascri
我运行它是为了获取 HTML 表单控制元素的集合 var elem = document.getElementById('display').elements; 我可以运行它来获取一组元素: var
如何正确使用Array.Splice? var myEmptyData = []; myEmptyData = $.parseJSON('[{ "m_sPartNumber": "B104-9
这个问题已经有答案了: Why does changing an Array in JavaScript affect copies of the array? (13 个回答) 已关闭 7 年前。
我正在为每个单击的导航容器设置一个 cookie。 它设置一个连接的数组并设置cookie值。如果再次单击,则将其从数组中删除。 它有点问题。 只有点击其他元素后才会拼接。然后它的行为就很奇怪。 可能
Javascript(使用 jQuery): var paragraphs = [ ['This is my first paragraph content of the first arra
如果我正在制作一款游戏,并且我希望某些内容仅每隔一段时间更新一次,那么解决此问题的最佳方法是什么? 我天真的想法只是保留一个通过 mod 循环的“帧”跟踪器。数学并以特定数字更新特定内容。 有更好的方
这个问题已经有答案了: How do you clone an array of objects in JavaScript? (33 个回答) using splice(0) to duplicat
我有数组 x、y 和 z。在遍历 x 时,根据条件我需要不断从 z 中删除元素。这是我正在尝试做的事情: var x = ["test0", "test1", "test2"]; var y = ["
我有 3 个包含时间段的数组,它们是字符串...像这样: $scope.shiftMorning = ['09:00', '09:30', '10:00', '10:30', '11:00', '11
我在我的表单上创建了一个功能,我可以通过单击一个按钮为多个图像添加多个文件输入,这按预期工作。现在,当我尝试使用 .splice 删除输入字段时,它会不断删除我的输入字段所在的数组的最后一项,而不是具
我必须向数组添加一些值。 代码示例: temp[0]=new Array("0","0"); temp[1]=new Array("0","0"); temp[2]=new Array("0","0"
我有一个包含字符串的数组,如果字符串中没有任何内容,我想使用 .splice() 将其从数组中删除。 不知何故,它没有得到所有空条目。如果开头有 2 个空条目,它只会得到一个。 这是我的 fiddle
我是一名优秀的程序员,十分优秀!