swap() 函数在 iostream 标头中有效吗?

Does swap() function works in iostream header?

提问人:Rio_t 提问时间:1/20/2022 最后编辑:Drew DormannRio_t 更新时间:1/20/2022 访问量:1659

问:

   #include <iostream>
   using namespace std;
   int main(){
   swap(a[i],a[j])
   }

在这种情况下,交换函数会自动工作,或者我需要创建另一个交换函数来解决这个问题?

C++ 数组 函数 IOSTREAM 交换

评论

4赞 Alan Birtles 1/20/2022
请展示一个最小的可重复示例,什么是?a
2赞 François Andrieux 1/20/2022
你是在问是否足够使用?如果这是您的问题,那么它可能适用于您的系统,但您应该包含正式提供 std::swap 的标头之一,以便它可以在任何平台上工作。#include <iostream>std::swap#include <utility>
0赞 463035818_is_not_an_ai 1/20/2022
它有效吗?你的编译器怎么说?它不在此处编译:godbolt.org/z/az8WqPxf8
0赞 drescherjm 1/20/2022
变量在哪里声明?a

答:

2赞 Bathsheba 1/20/2022 #1

swap不是 C++ 中的关键字,而是 C++ 标准库中的函数。因此,要使用它,您需要从相应的 C++ 标准库标头中引入函数。不幸的是,自从它首次进入 C++ 标准以来,它一直相当流动:std::swap

  • 直到但不包括 C++11,您需要#include <algorithm>

  • 从 C++ 11 开始,您需要#include <utility>

  • 从 C++17 中,您可以改为#include <string_view>

依赖标头的隐式包含意味着您不是在编写可移植的 C++。

评论

0赞 Pete Becker 1/20/2022
嗯,我在 C++17 或 C++20 中没有看到提供. 确实定义了它。<string_view>std::swap<utility>
0赞 Bathsheba 1/20/2022
@PeteBecker:这还不是很确定(我知道你是这个领域的专家),但请看 en.cppreference.com/w/cpp/algorithm/swap
0赞 Drew Dormann 1/20/2022
@PeteBecker就其价值而言,这里也提到了它。en.cppreference.com/w/cpp/header/string_view
0赞 François Andrieux 1/20/2022
我看到应该在末尾提供一条注释string.view.synopswap
1赞 Pete Becker 1/20/2022
@FrançoisAndrieux -- 啊哈!措辞奇怪,但是,是的,这似乎确实是意图。(“可用”是懒惰的写作;它应该是“应被定义”,以强加一个要求)(顺便说一句,标准语中的“注释”是非规范的,并标记为“[注意...... ]”。有问题的文本不是注释)无论如何,仍然有效,并且不会引起人们的注意。<utility>