我正在为一段返回大型数组的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) 我有类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)
该错误似乎表明有一种方法可以定义一个构造函数,该构造函数采用括号括起的初始化列表.有谁知道如何做到这一点?
我有一个数组成员的类,我想初始化为全零.
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中有什么区别吗?
我在声明和初始化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)
对不起,如果我的格式不好,我几乎无法弄清楚这个网站,更不用说如何修复我的代码:(
我尝试这样的东西(没有编译):
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 ++中做得最好?
注意:我可能想要使用此方法仅设置一些数组元素.
请不要在这里对这段代码中真正奇怪的工人层级提出质疑,我不知道为什么有人会想要这样的东西,但我决定给自己一个多重继承的练习,只是为了确保我完全理解它.所以这是结果.
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)