小编Dan*_*anh的帖子

为什么采用迭代器的构造函数需要元素为EmplaceConstructible?

我已经在标准(n4296),23.2.3/4(表100)中看到了对序列stl容器的要求,并且读过一个带有参数迭代器的构造函数(X - 容器,i和j - 输入迭代器)

X(i, j)
X a(i, j)
Run Code Online (Sandbox Code Playgroud)

要求容器的元素类型为EmplaceConstructible.

Requires: T shall be EmplaceConstructible into X from *i
Run Code Online (Sandbox Code Playgroud)

我认为构造函数可以通过为范围中的每个迭代器调用std :: allocator_traits :: construct(m,p,*it)方法来实现(其中m - 类型A的分配器,p - 指向内存的指针,它 - 迭代器in [i; j],并且只需要CopyInsertable元素的概念,因为只提供一个参数用于复制/移动,而EmplaceConstructible概念要求元素由一组参数构造.这个决定有什么理由吗?

c++ stl c++11 c++-concepts c++14

3
推荐指数
1
解决办法
214
查看次数

从元组中提取多个类型

这应该是显而易见的,是否有一些简短的语法来获得一个子组?

像这样的东西:

std::tuple<std::string, double, int> myTuple;
std::tuple<std::string, int> subTuple = std::get<std::string, int>(myTuple);
Run Code Online (Sandbox Code Playgroud)

c++ tuples c++11

3
推荐指数
1
解决办法
745
查看次数

我们需要移动和复制分配吗?

对于课程A,我们可以使用

A& operator=( A other ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

代替

A& operator=( const A&  other ) { /* ... */ }
A& operator=( const A&& other ) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

没有恶化的表现或其他负面影响?

c++ assignment-operator move-semantics c++11

3
推荐指数
2
解决办法
244
查看次数

c ++在正向和反向迭代之间切换

我试图在前向和后向迭代之间切换,而不必在迭代中复制代码.

我尝试使用三元运算符,但它没有用

auto begin = reverse ? mPxSize::reverse_iterator :
                       mPxSize::iterator;
Run Code Online (Sandbox Code Playgroud)

(这是我的理解,它不喜欢不同的类型),所以我想知道是否有迭代器的基本版本我可以声明以下将工作

??? begin;
??? end;

if (reverse) {
    mPxSize::reverse_iterator begin = m_levels.rbegin();
    mPxSize::reverse_iterator end = m_levels.rbegin();
} else {
    mPxSize::const_iterator begin = m_levels.begin();
    mPxSize::const_iterator end = m_levels.begin();
}

for ( it = begin; it != end; it++ ) {
Run Code Online (Sandbox Code Playgroud)

我可以预先使用一些基数来预先设置迭代器吗?或者是否有一种简单的方法可以在这里使用模板(我不太清楚,我承认)

c++

3
推荐指数
1
解决办法
565
查看次数

当C++ 11初始化变量时,{}和=不同

我使用CLion作为IDE,它在IDE中报告错误

必须初始化字段z

它可以编译和运行.但是,如果我更改const int z{3};为const int z=3;,则IDE中不会报告任何错误.我的问题是它是否确实是我的代码错误或它只是IDE中的错误?这两种初始化方法有何不同?您的IDE是否报告此错误?

#include <iostream>
using namespace std;

class Test
{
private:
    const int x = 3;
    int y;
    const int z{3};
public:
    Test(int);
    int gety(){
        return y;
    }
};

Test::Test(int a){
    y=x+4;
}

int main()
{
    Test test(5);
    std::cout << test.gety() << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11 clion

3
推荐指数
1
解决办法
118
查看次数

iText7在内存而不是物理文件中创建PDF

如何使用itext7在内存流中创建PDF,而不是物理文件?我不知道如何在最新版本中进行操作,有帮助吗?

我尝试了以下代码,但pdfSM未正确填充:

string filePath = "./abc.pdf";

MemoryStream pdfSM = new ByteArrayOutputStream();

PdfDocument doc = new PdfDocument(new PdfReader(filePath), new PdfWriter(pdfSM));
.......

doc.close();
Run Code Online (Sandbox Code Playgroud)

完整的测试代码如下,供您参考,它在filePath进入PdfWriter时有效,但不适用于内存流:

    public static readonly String sourceFolder = "../../FormTest/";

    public static readonly String destinationFolder = "../../Output/";

    static void Main(string[] args)
    {

        String srcFilePattern = "I-983";
        String destPattern = "I-129_2014_";

        String src = sourceFolder + srcFilePattern + ".pdf";
        String dest = destinationFolder + destPattern + "_flattened.pdf";
        MemoryStream returnSM = new MemoryStream();

        PdfDocument doc = new PdfDocument(new PdfReader(src), new PdfWriter(returnSM));

        PdfAcroForm form …
Run Code Online (Sandbox Code Playgroud)

c# memory pdf itext

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

检查类是否有空的析构函数

假设我有一个类:

struct A {
public:
    A(int a, int c): a_(a+c), c_(a-c) { }
    A(const A& arg): a_(arg.a_), c_(arg.c_) { }
    int a_;
    char c_;
};
Run Code Online (Sandbox Code Playgroud)

该类的对象位于一些dinamically分配的内存区域内.在释放该存储区域期间,不应该调用析构函数.所以我想确保析构函数真的是空的.例如,如果某人将std::string s_;成员添加到A类中,那么如果不调用析构函数,则显然会出现内存泄漏.

如果A中没有Constructor和Copy Constructor,那么我可以添加check:

 static_assert(std::is_trivial<A>::value)
Run Code Online (Sandbox Code Playgroud)

但是对于A级来说,它会失败.

所以我的问题:如果这类的析构函数真的是空的并且没有做任何工作,我可以在编译时以某种方式检查吗?

c++ c++11

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

启动 Kafka 时出错

我在相关节点上运行了 Zookeeper 守护进程,并尝试启动 kafka 代理,但出现以下错误:

FATAL [Kafka Server 13], Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.NumberFormatException: For input string: "2181""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at org.apache.zookeeper.client.ConnectStringParser.<init>(ConnectStringParser.java:72)
    at org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:443)
    at org.apache.zookeeper.ZooKeeper.<init>(ZooKeeper.java:380)
    at org.I0Itec.zkclient.ZkConnection.connect(ZkConnection.java:64)
    at org.I0Itec.zkclient.ZkClient.connect(ZkClient.java:876)
    at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:98)
    at org.I0Itec.zkclient.ZkClient.<init>(ZkClient.java:84)
    at kafka.server.KafkaServer.initZk(KafkaServer.scala:157)
    at kafka.server.KafkaServer.startup(KafkaServer.scala:82)
    at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:29)
    at kafka.Kafka$.main(Kafka.scala:46)
    at kafka.Kafka.main(Kafka.scala)
Run Code Online (Sandbox Code Playgroud)

我的服务器属性

broker.id=13
port=9092
host.name=node013
num.network.threads=3
num.io.threads=8
zookeeper.connect="node014:2181,node135:2181,node136:2181"
zookeeper.connection.timeout.ms=6000
Run Code Online (Sandbox Code Playgroud)

和zookeeper.properties

dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0
Run Code Online (Sandbox Code Playgroud)

我已尝试但未能弄清楚为什么错误日志在端口属性中显示额外的“。知道可能导致问题的原因吗?

apache-kafka apache-zookeeper

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

为何超出内存限制?

我正在Leetcode OJ上做"频率排序字符"问题.任何人都可以向我解释为什么会这样吗?

class Solution {

public:
    struct Node {
        int freq;
        char ch;
    };

    static bool lambda(struct Node a, struct Node b){
        return a.freq>b.freq;
    }

    string frequencySort(string s) {
        if(s.size() == 0)
            return "";

        string res = "";
        vector<Node> nums(256);

        for(char c : s){
            nums[(int)c].ch = c;
            nums[(int)c].freq++;
        }

        std::sort(nums.begin(), nums.end(), Solution::lambda);

        char c;
        for(int i=0; nums[i].freq > 0; i++){
            c = nums[i].ch;
            while(nums[i].freq--){
                res = res + c; // If I replace this line with res += c, it …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

0
推荐指数
1
解决办法
4533
查看次数

sizeof运算符在C中的工作原理?

在下面的代码中:

#include<stdio.h>
int main(void)
{
    printf("%d",sizeof(int));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在gcc(Ubuntu 4.8.4-2ubuntu1~14.04.3)4.8.4编译器上编译时,它会发出警告:

格式'%d'需要类型为'int'的参数,但参数2的类型为'long unsigned int'[ - Wformat =] printf("%d",sizeof(int));

为什么我收到这个警告?是返回类型的sizeof是'long unsigned int'吗?

当我用'%ld'替换'%d'时警告就开始了.

c sizeof

0
推荐指数
1
解决办法
908
查看次数

如何在 WINAPI 中忽略 HttpPOST 请求中的证书

我有一个 VC++ HttpPOST 方法,它适用于 80 和 443 端口。(在 google.com 等热门网站上)

现在,当我连接到具有 cgi 脚本的安全主机(172.17.9.93)时,现在当我使用fiddler连接时,我收到证书无效的警告,接受警告后我就可以连接。 证书错误

我必须在 C++ 中执行相同的行为,即使用下面的 flags 和函数 HttpOpenRequest() 中的一些组合来忽略证书,SECURITY_FLAG_IGNORE_UNKNOWN_CA但它INTERNET_FLAG_IGNORE_CERT_CN_INVALID失败并给出以下输出。

C++ 控制台输出

 172.17.9.93 : 443  data base-bin/hello.cgi

Error 12045 has occurred while HttpSendRequest
INVALID CA request received (12045)
Run Code Online (Sandbox Code Playgroud)

源代码 VC++

#define _WIN32_WINNT 0x600
#include <windows.h>
#include <stdio.h>
#include <string>
#include <wininet.h>
#pragma comment(lib,"Wininet.lib")
using namespace std;

int doPost(std::string send, std::string &receive, LPCTSTR host, int port, LPCTSTR url)
{

    char szData[1024];
    int winret = …
Run Code Online (Sandbox Code Playgroud)

c++ ssl winapi visual-c++

0
推荐指数
1
解决办法
5635
查看次数

如何在C++ 11中声明堆栈引用?

我正在实现堆栈引用.但是我收到了"Segmentation fault(core dumped)"的错误.我在Ubuntu 14.04上使用g ++(Ubuntu 4.8.2-19ubuntu1)4.8.2.非常感谢.

代码如下所示.

#include<iostream>
#include<stack>

using namespace std;

int main() {
    stack<int>* S;
    S->push(4);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stack c++11

-1
推荐指数
2
解决办法
107
查看次数

为什么以下代码将0作为输出

#include <iostream>
#include <iomanip>

using namespace std;

int main() 
{
        float a;

        float b;
        float avg;

        avg = ((3.5 * a) + (7.5 * b))/(3.5 + 7.5);

        cout <<"AVG = ";
        std::cout << std::fixed << std::setprecision(5) << avg << endl;


        return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

-4
推荐指数
1
解决办法
104
查看次数