小编Geo*_*ard的帖子

将元素添加到STL容器的后面

我正在寻找一种将元素添加到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)

这里的问题很微妙.此代码适用于vectors,因为std::vector实现了该emplace功能.但std::string不是!是否有更通用的方法来执行相同的操作?

c++ stl c++11 c++14

7
推荐指数
2
解决办法
2781
查看次数

std :: map :: begin()之前的STL迭代器

在C++ 11中std::map,是否有一些有效的迭代器x使得++ x保证相等map::begin()?我想检测一下我刚刚调用的函数(我的)是否已经从函数前面走了一个迭代器.该函数将迭代器向后移动一个位置.

答案是否适用于图书馆的其他部分?

c++ iterator stl c++11 reverse-iterator

7
推荐指数
2
解决办法
6663
查看次数

TCP打孔问题

我试图使用本文中概述的原理为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)

python sockets tcp hole-punching

7
推荐指数
1
解决办法
2786
查看次数

如何使用duplicity备份到Google驱动器?

我一直在尝试将备份到备份到谷歌驱动器.但看起来它仍然使用旧的客户端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云端硬盘并知道如何执行此操作?

backup google-docs-api duplicity-backup

7
推荐指数
1
解决办法
5837
查看次数

Android应用程序的服务可以在用户启动之前运行吗?

该应用程序有一个BroadcastReceiver,它侦听启动完成事件并启动后台服务以将一些数据发送到我的HTTP服务器.

我的问题是,如果应用程序从未由用户运行(仅安装),则BroadcastReceiver是否会收到引导事件?

android broadcastreceiver

6
推荐指数
1
解决办法
937
查看次数

初始化大型std :: arrays时编译器挂起

我需要初始化一个非常大的多维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一个引用(分配内存)是最好的方法,但我无法弄清楚语法.

c++ arrays c++11

6
推荐指数
1
解决办法
590
查看次数

为什么“docker-compose up”会删除卷?

我正在测试许多作为容器的服务,通常是通过 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 …

docker docker-compose

6
推荐指数
1
解决办法
5071
查看次数

在智能指针的bimap中找到原始指针

我需要能够搜索原始指针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)

绕过这个的最好方法是什么?

c++ smart-pointers c++11

5
推荐指数
1
解决办法
111
查看次数

Android中的离线热门词检测API

Android 内置了语音识别 API,如果运气好,您甚至可以让他们脱机工作.无论如何,使用SpeechRecognizer将为您提供一个相当完整的语音识别解决方案.

但是,我有兴趣实现Google Now风格的"热门词汇"(如"OK,Google"),可以激活正确的语音识别功能.这个热门词汇需要永远在线,并且为了电池和用户的无线账单,它不应该使用网络.换句话说,我如何复制Google Now的热门词功能?

android voice-recognition

5
推荐指数
1
解决办法
2011
查看次数

Qt 维护工具无法启动

从“开始”菜单启动该工具不会执行任何操作。

从命令行运行 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 中的一个错误。但我仍然想知道如何解决它。

qt

5
推荐指数
2
解决办法
1万
查看次数