在C ++ 98中,这就是我想要做的事情(这不起作用,因为_M_start等是私有成员):
//vectors are predefined already
std::vector<int> a;
std::vector<int> b(10000000,20);
//in later part of code
//a=b; //expensive copy
//std::swap(a,b); //inexpensive swap
vectormove(a,b); //i need an inexpensive one way swap instead
这就是我想打电话的方式
<?php
$string = '<a href="http://www.example.com">test</a> http://www.example.com';
$rx = array("&(<a.+https?:\/\/[\w]+[^ \,\"\n\r\t<]*>)(.*)(<\/a\>)&si", "&(\s){1,}(https?:\/\/[\w]+[^ \,\"\n\r\t<]*)&");
$rp = array("$1$2$3", "<a href=\"$2\">$2</a>");
$string = preg_replace($rx,$rp, $string);
var_dump($string);
// DUMPS:
// '<a href="http://www.example.com">test</a><a href="http://www.example.com">http://www.example.com</a>'
我可能通过使用副本,移动和交换松散地使用了术语,但我对这个主题没有更好的把握。我希望我能表达我的意图。
答案 0 :(得分:1)
看起来你只想要a
将引用到b
的内部。这样做的方法就是:
std::vector<int>& a = b;
如果您希望a
接管 b
的内部,那就是:
std::vector<int> a = std::move(b);
在C ++ 03中可以实现为带空向量的交换:
std::vector<int> a;
using std::swap;
swap(a, b);
答案 1 :(得分:0)
如果您的问题是如何撰写vectormove()
的可编辑实施方式,请执行以下操作:
// NOT USEFUL CODE
void vectormove(std::vector<int>& a, std::vector<int>& b)
{
memcpy(&b, &a, sizeof(std::vector<int>));
}
但是这没用,因为一旦你完成了这个,你就会走向未定义的行为。也许是双倍免费,也许是免费使用后等等。
您最好通过常规a.swap(b)
或将a
存储为类型int*
来获得最佳服务,如下所示:
std::vector<int> b(10000000,20);
std::pair<int*, int*> a(&b[0], &b[b.size()]);
现在你有一个a
可以廉价传递并引用原始向量。通过之后修改a
,确保您不会使b
无效。