如何反转 vector (有源码)
[toc]
std::reverse
- Reverses the order of the elements in the range [first,last).
Demo
1 | void Method2_erase() { |
1 | // 再次打印更新后 vector 容器的大小和容量 |
源码
源码下载
编译
1 | cd 文件下载目录 |
[toc]
1 | void Method2_erase() { |
1 | // 再次打印更新后 vector 容器的大小和容量 |
1 | cd 文件下载目录 |
[toc]
1 | void Method1_clear() { |
1 | Method 1 |
Removes from the vector either a single element (position) or a range of elements ([first,last)).
An iterator pointing to the new location of the element that followed the last element erased by the function call.
1 | void Method2_erase() { |
1 | Method 2 |
Exchanges the content of the container by the content of x, which is another vector object of the same type. Sizes may differ.
After the call to this member function, the elements in this container are those which were in x before the call, and the elements of x are those which were in this. All iterators, references and pointers remain valid for the swapped objects.
1 | void Method3_swap() { |
1 | Method 3 |
1 | cd 文件下载目录 |
周五晚上从北京乘火车出发,第二天早晨到达大连火车站;在大连游玩三天,第三天晚上乘高铁返回北京,游览了大连知名的星海广场、海之韵公园,棒棰岛等景点,品尝了炒闷子等美食,还能在市区近距离喂野生鹿,非常开心的旅行。
package
specifier to
a .proto
file to prevent name clashes between protocol
message types.我在实际 spark 上处理数据时,报错 "Could not serialize object: TypeError: can't pickle google.protobuf.pyext._message.EnumDescriptor objects", 通过报错信息,很明确这是在实际 python 代码中引用 enum 导致的问题.
1 | # Add code later |
在工作和生活中,我们经常需要在外部访问我们家中的主机。然而,由于主机处于内网中,外部设备 (公网) 很难直接连接到主机以获取所需的资料。
本文将介绍一种通过内网穿透软件来搭建内网服务的方法,使得外部用户能够方便地访问和使用内网中的服务和资源。在这个过程中,将会涉及到内网穿透和反向代理的核心技术。
通过调研不同的 内网穿透工具,目前主要分为两种类型:
一种是通过销售硬件设备和流量的方式实现,比如快解析、花生壳、神卓互联、NAT123 等。这些工具拥有自主研发的核心技术,可以在淘宝等平台直接购买和配置。然而,这种方式的缺点是需要付费购买硬件设备,并且免费流量有限制,适合一些专业用户或氪金用户。
一种是使用免费开源软件(如 frp 和 nps)来搭建内网穿透,不需要额外购买硬件设备,但需要具备公网 IP 的条件。这种方式的优点在于可以根据自己的需求进行定制化配置,后续扩展性强, 但对于新手来说入门门槛较高。
考虑到使用开源软件的优点,我的本地主机没有敏感信息,流量不设限制, 所以我选择了免费开源软件 -- frp 来搭建内网穿透服务。请注意,虽然 frp 目前使用广泛,但是本身逻辑设计有先天性缺陷,网络安全性差, 非常容易造成网络堵塞,不能长时间连接使用,技术不够成熟.
请注意,以下的教程适合具备一定计算机基础的开发者,对于新手来说可能存在一定的配置难度。
我进行了如下的网络配置,以实现通过 frp 在远程访问家中的主机和使用 web 服务的目标。比如,在 ipad 上就可以通过网页连接内网服务上的 stable diffusion 生成图片。具体示意图如下:
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
内网穿透,即 NAT(Network Address Translator)穿透,是指计算机在内网(局域网)内使用私有 IP 地址,在连接外网(互联网)时使用全局 IP 地址的技术。简而言之,内网穿透可以将内网中的服务暴露到公网,使得这些服务可以通过公网访问。
反向代理(reverse proxy)是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
你可以参考 安装教程 中的详细步骤来下载、部署和配置 frp。该教程提供了安装和开机自启动的指导,具有很好的实用性。
操作系统:Ubuntu 20.04
操作系统:Ubuntu 20.04
操作系统:Ubuntu 22.04
在我本地的开发机器 #2 ,部署了 stable diffusion 和 Jupyter Notebook
两个 web 应用,它们通过指定的本地端口提供服务,例如通过
127.0.0.1:8080
可以访问
jupyter。由于这些应用都部署在本地,无法直接从公网访问,因此 #2
主机需要配置 frpc 服务来支持公网访问。
在 #2 的 frp 的配置文件(frpc.ini)添加下面的内容
1 |
|
在上述配置中,我们使用不同的 custom_domains
(例如
a.my_domain.com
和 b.my_domain.com
)以及不同的
local_port
(例如 8888
和
9999
)来区分两个本地网页终端。在实际应用中,通过
custom_domains:vhost_http_port 就可以访问内网的 web 项目.
在 frp 服务器上配置相应的转发规则,将请求转发到本地网页终端。你可以在 frps.ini 配置文件中进行设置。
1 | [common] |
通过以上配置,你可以通过 a.my_domain.com:8888
访问第一个本地网页终端,通过 b.my_domain.com:8888
访问第二个本地网页终端。
如果你想要支持多个服务端,需要在每个客户端安装一个 frpc
服务,并根据每个设备的差异进行配置,确保每个设备的
remote_port
不重复即可。
上文提到,本地有两台主机,如果想让两台主机都可以远程访问, 需要在每个客户端安装一个 frpc 服务.
1 |
|
1 |
|
1 | [common] |
根据提供的示例,两台机器都绑定服务器的 1234
端口,但是远程连接的端口不同,第一台机器的远程连接端口为
2345
,第二台机器的远程连接端口为 3456
。假设 #1
用户名为 test1, #2 用户名为 test2, 那么
1 | ssh -oPort=2345 test1@1.2.3.4 |
1 | ssh -oPort=3456 test2@1.2.3.4 |
bool operator==( const std::vector<T, Alloc>& lhs, const std::vector<T, Alloc>& rhs )
其他方法 - std::equal - std::mismatch
Snap 包是 Ubuntu 16.04 LTS 发布时引入的新应用格式包。
当你在安装完 snap 后,你会发现在在根目录下会出现如 /dev/loop0、/dev/loop1 等挂载点,这些挂载点正是 snap 软件包的目录。Snap 使用了 squashFS 文件系统,一种开源的压缩,只读文件系统,基于 GPL 协议发行。一旦 snap 被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,意味着该目录不能被随意篡改和写入。
较传统 Linux 的 rpm,deb 软件包,snap 引入 squashFS 文件系统,使得 snap 的安全性要优于传统的 Linux 软件包。同时,每个 snap 默认都被严格限制(confined),即限制系统权限和资源访问。但是,可通过授予权限策略来获得对系统资源的访问。
使用 snap 包的另一好处就是它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立;解决了应用程序之间的依赖问题,使应用程序之间更容易管理,但是由此带来的问题就是它占用更多的磁盘空间。
1 | // Shutter is not available in Ubuntu 20.04. |
1 | // 查看你系统中有哪些Python的二进制文件可供使用 |
[toc]
目前手上有一台国外 VPS,我在 19 年开始在 VPS 上部署个人网站。之前利用这个 VPS 部署本地编译好的静态网页,流程大概是
这种部署方式对多终端用户不友好,比如
本文介绍一种方式,
这种方法可以在多终端实时更新网站内容,摆脱对单一终端的依赖,能够支持
[toc]
在 STL 中,set 和 multiset 是基于红黑树实现的。
1 | #include <iostream> |
输出结果如下
1 | min value of set container is -1 |
参考 <剑指 offer> 面试题 40 — 最小的 k 个数
参考 <剑指 offer> 面试题 41 — 数据流中的中位数
2023.04.02 搭建架子,写出 set 版本。
[toc]