gpt4 book ai didi

c++ - 关于 C++ STL 容器交换函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:15 26 4
gpt4 key购买 nike

最近了解到所有的STL容器都有swap功能:即

c1.swap(c2);  

将导致 c1 下的对象被分配给 c2,反之亦然。我问我的教授,在 c1 和 c2 作为引用的情况下是否也是如此。他说遵循相同的机制。

我想知道这是怎么发生的,因为无法重置 C++ 引用。

最佳答案

引用是别名。如果您有两个引用,调用 swap 将交换它们所引用的内容,而不是引用本身。

C& r1 = c1; // r1 references c1
C& r2 = c2; // r2 references c2

r1.swap(r2); // same as c1.swap(c2)

交换的不是变量,而是使它们在逻辑上独立的变量。如果一个容器只包含一个指针,如果您将该指针与另一个容器的指针交换,您就有效地交换了容器。变量本身仍然存在。


具体例子:

typedef std::vector<int> vec;

vec c1;
vec c2;

// fill em up

c1.swap(c2);
/*
A vector, internally, has a pointer to a chunk of memory (and some other stuff).
swap() is going to swap the internal pointer (and other stuff) with the other
container. They are logically swapped.
*/

vec& r1 = c1; // r1 is an alias for c1
vec& r2 = c2; // r2 is an alias for c2

r1.swap(r2); // same as c1.swap(c2). they are now unswapped

关于c++ - 关于 C++ STL 容器交换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2558819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com