我正在寻找一种将元素添加到STL容器背面的一般方法.我希望代码能够支持尽可能多的STL容器类型.以下代码演示了我的问题:
#include <vector>
#include <string>
using namespace std;
template<typename T>
class S {
T built;
typename T::iterator built_it;
public:
S() : built{}, built_it{built.end()} {}
void add_to(typename T::value_type e) {
built.emplace(built_it, e);
++built_it;
}
const T& get() {
return built;
}
};
int main()
{
S<std::vector<int>> e;
S<std::string> f;
e.add_to(3); // works
f.add_to('c'); // doesn't
}
Run Code Online (Sandbox Code Playgroud)
这里的问题很微妙.此代码适用于vector
s,因为std::vector
实现了该emplace
功能.但std::string
不是!是否有更通用的方法来执行相同的操作?
在C++ 11中std::map
,是否有一些有效的迭代器x使得++ x保证相等map::begin()
?我想检测一下我刚刚调用的函数(我的)是否已经从函数前面走了一个迭代器.该函数将迭代器向后移动一个位置.
答案是否适用于图书馆的其他部分?
我试图使用本文中概述的原理为Python 3中的防火墙编写基本的TCP打孔器.但是我无法连接任何东西.这是代码:
#!/usr/bin/python3
import sys
import socket
import _thread as thread
def client():
c = socket.socket()
c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
c.bind((socket.gethostbyname(socket.gethostname()), int(sys.argv[3])))
while(c.connect_ex((sys.argv[1], int(sys.argv[2])))):
pass
print("connected!")
thread.interrupt_main()
def server():
c = socket.socket()
c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
c.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
c.bind((socket.gethostbyname(socket.gethostname()), int(sys.argv[3])))
c.listen(5)
c.accept()
print("connected!")
thread.interrupt_main()
def main():
thread.start_new_thread(client, ())
thread.start_new_thread(server, ())
while True:
pass
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我决定在我的本地计算机上尝试打孔器,这样我就可以捕获两个实例发送的所有流量.我首先建立了一个环回防火墙:
iptables -A INPUT -i lo -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j …
Run Code Online (Sandbox Code Playgroud) 我一直在尝试将备份到备份到谷歌驱动器.但看起来它仍然使用旧的客户端API.
我发现一些线程说应该支持新的API,但没有太多关于如何使它工作的细节.
我得到了编译和使用duplicity 7.0.3,但后来我得到了这个错误:
BackendException: GOOGLE_DRIVE_ACCOUNT_KEY environment variable not set. Please read the manpage to fix.
Run Code Online (Sandbox Code Playgroud)
有没有人设置双重性来使用Google云端硬盘并知道如何执行此操作?
该应用程序有一个BroadcastReceiver,它侦听启动完成事件并启动后台服务以将一些数据发送到我的HTTP服务器.
我的问题是,如果应用程序从未由用户运行(仅安装),则BroadcastReceiver是否会收到引导事件?
我需要初始化一个非常大的多维std::array
数据:
class Thing;
class World
{
public:
World() : space{nullptr} {};
~World() = default;
private:
static unsigned int const size = 1000;
std::array<std::array<std::array<std::unique_ptr<Thing>, size>, size>, size> space;
};
Run Code Online (Sandbox Code Playgroud)
如果你试图实例化它,G ++ 4.8.2扼杀:它消耗所有可用的内存,不会返回.也就是说,编译器挂起,我永远不会得到可执行文件. 为什么是这样? 请注意,clang ++没有问题.
注意:我完全意识到将这么多数据放在堆栈上会溢出它. 在堆上初始化它的最佳方法是什么? 我认为制作space
一个引用(分配内存)是最好的方法,但我无法弄清楚语法.
我正在测试许多作为容器的服务,通常是通过 docker-compose。
因为我是 docker 的新手,所以这个问题可能显得很菜鸟。
在某个时候,我运行了一个 docker-compose 堆栈(几个带有卷的容器)。我必须停止容器才能重新使用相同的端口;我是用命令做到的docker stop
。
当我准备好再次启动我的容器时,我做了:
$ docker-compose start
Starting jenkins ... done
Starting gitlab-ce ... done
ERROR: No containers to start
Run Code Online (Sandbox Code Playgroud)
我检查了容器,惊讶地发现:
$ docker-compose ps
Name Command State Ports
------------------------------
Run Code Online (Sandbox Code Playgroud)
所以我跑了:
$ docker-compose up
Creating volume "dockerpipelinejenkins_jenkins_home" with default driver
Creating volume "dockerpipelinejenkins_gitlab_logs" with default driver
Creating volume "dockerpipelinejenkins_gitlab_data" with default driver
Creating volume "dockerpipelinejenkins_gitlab_config" with default driver
Creating dockerpipelinejenkins_jenkins_1 ... done
Creating dockerpipelinejenkins_gitlab-ce_1 ... done
Attaching to dockerpipelinejenkins_jenkins_1, dockerpipelinejenkins_gitlab-ce_1
Run Code Online (Sandbox Code Playgroud)
...我很震惊地发现我的卷已被重新创建,有效地删除了我的数据。
为什么 docker …
我需要能够搜索原始指针Thing*
的boost::bimap<shared_ptr<Thing>, int>
.但是,我无法使用签名调用函数,bm.left.find(thingRawPtr)
因为无法从原始指针隐式构造智能指针:
bimap<shared_ptr<Thing>, int> bm;
void f(Thing* thing)
{
bm.left.find(thing); // (Nasty) compile error
}
Run Code Online (Sandbox Code Playgroud)
绕过这个的最好方法是什么?
Android 内置了语音识别 API,如果运气好,您甚至可以让他们脱机工作.无论如何,使用SpeechRecognizer将为您提供一个相当完整的语音识别解决方案.
但是,我有兴趣实现Google Now风格的"热门词汇"(如"OK,Google"),可以激活正确的语音识别功能.这个热门词汇需要永远在线,并且为了电池和用户的无线账单,它不应该使用网络.换句话说,我如何复制Google Now的热门词功能?
从“开始”菜单启动该工具不会执行任何操作。
从命令行运行 Qt 时出现以下错误MaintenanceTool.exe --verbose
:
"Cannot open file C:/Qt/MaintenanceTool.dat for reading: No such file or directory"
Run Code Online (Sandbox Code Playgroud)
谁知道怎么修它?我保证我没有删除该文件,尽管它不存在是正确的。我只有MaintenanceTool.ini
。安装日志文件没有提到任何.dat
文件,也没有在最后给出任何错误。
编辑:似乎是Qt 中的一个错误。但我仍然想知道如何解决它。