相关疑难解决方法(0)

*不*初始化其成员的C++向量?

我正在为一段返回大型数组的C代码制作一个C++包装器,所以我试图将数据返回到vector<unsigned char>.

现在问题是,数据大小为兆字节,并且vector不必要地初始化其存储,这实际上是将我的速度降低了一半.

我该如何防止这种情况?

或者,如果不可能 - 是否有其他STL容器可以避免这种不必要的工作?或者我最终必须制作自己的容器?

(预C++ 11)

注意:

我将矢量作为输出缓冲区传递.我不是从其他地方复制数据.
它是这样的:

vector<unsigned char> buf(size);   // Why initialize??
GetMyDataFromC(&buf[0], buf.size());
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

45
推荐指数
2
解决办法
3175
查看次数

Brace封闭的初始化列表构造函数

我有类Phenotype与以下构造函数:

Phenotype(uint8 init[NUM_ITEMS]);
Run Code Online (Sandbox Code Playgroud)

我可以像这样创建一个Phenotype:

uint8 data[] = {0,0,0,0,0};
Phenotype p(data);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试创建这样的一个时,我收到一个错误:

Phenotype p = {0,0,0,0,0};
Run Code Online (Sandbox Code Playgroud)

输出:

$ make
g++ -Wall -g main.cpp -std=c++0x
main.cpp: In function ‘int main(int, char**)’:
main.cpp:109: error: no matching function for call to ‘Phenotype::Phenotype(<brace-enclosed initializer list>)’
main.cpp:37: note: candidates are: Phenotype::Phenotype(uint8*)
Run Code Online (Sandbox Code Playgroud)

该错误似乎表明有一种方法可以定义一个构造函数,该构造函数采用括号括起的初始化列表.有谁知道如何做到这一点?

c++ initializer-list c++11

43
推荐指数
3
解决办法
6万
查看次数

零初始化初始化列表中的数组成员

我有一个数组成员的类,我想初始化为全零.

class X
{
private:
    int m_array[10];
};
Run Code Online (Sandbox Code Playgroud)

对于局部变量,有一种简单的零初始化方法(参见此处):

int myArray[10] = {};
Run Code Online (Sandbox Code Playgroud)

此外,类成员m_array显然需要初始化,因为默认初始化整数会见好就收随机的垃圾,如解释在这里.

但是,我可以看到两种方法为成员数组执行此操作:

括号:

public:
    X()
    : m_array()
    {}
Run Code Online (Sandbox Code Playgroud)

带括号:

public:
    X()
    : m_array{}
    {}
Run Code Online (Sandbox Code Playgroud)

两个都正确吗?这两者在C++ 11中有什么区别吗?

c++ initialization array-initialization initialization-list

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

如何在构造函数中初始化char数组?

我在声明和初始化char数组时遇到问题.它始终显示随机字符.我创建了一小段代码来显示我在更大的程序中尝试的内容:

class test
{
    private:
        char name[40];
        int x;
    public:
        test();
        void display()
        {
            std::cout<<name<<std::endl;
            std::cin>>x;
        }
};
test::test()
{
    char name [] = "Standard";
}

int main()
{   test *test1 = new test;
    test1->display();
}
Run Code Online (Sandbox Code Playgroud)

对不起,如果我的格式不好,我几乎无法弄清楚这个网站,更不用说如何修复我的代码:(

c++ arrays char

10
推荐指数
4
解决办法
3万
查看次数

如何使用初始化列表初始化数组元素?

我尝试这样的东西(没有编译):

struct mystruct {
    somestruct arr[4];
    mystruct(somestruct val) : arr[0](val), arr[1](val), arr[2](val), arr[3](val) {}
};
Run Code Online (Sandbox Code Playgroud)

如何在c ++中做得最好?

注意:我可能想要使用此方法仅设置一些数组元素.

c++ visual-c++

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

C++多重继承

请不要在这里对这段代码中真正奇怪的工人层级提出质疑,我不知道为什么有人会想要这样的东西,但我决定给自己一个多重继承的练习,只是为了确保我完全理解它.所以这是结果.

using namespace std;

class Employee
{
protected:
    string name;
public:
    string getname()
    {
        return name;
    }
    void setname(string name2)
    {
        name = name2;
    }
    Employee(string name2)
    {
        name = name2;
    }
    Employee(){}
};

class Manager : public Employee
{
public:
    string getname()
    {
        return ("Manager" + name);
    }
    Manager(string name2) : Employee(name2){}
    Manager() : Employee(){}
};

class Supervisor : public Manager,public Employee
{
public:
    Supervisor(string name2) : Manager(name2) , Employee(name2){}
    Supervisor() : Manager() , Employee(){}
    string getname()
    {
        return …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance multiple-inheritance diamond-problem

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