我有一个类有3-4个数据类型的成员,std::map<string, vector<string>>用于缓存数据.它的实例创建一次,数据填入服务调用的所有映射中.我有用于访问这些地图的getter函数.(这里也有一些线程锁定逻辑)
这些getter函数被调用了很多次,我很担心性能,因为地图对象被复制了很多次.
class A {
private:
map<string, vector<string>> m1;
map<string, vector<string>> m2;
map<string, vector<string>> m3;
public:
map<string, vector<string>> getm1() { return m1; }
map<string, vector<string>> getm2() { return m2; }
map<string, vector<string>> getm3() { return m3; }
}
class B {
B() { }
static A a;
map<string, vector<string>> getm1() { return a.m1; }
map<string, vector<string>> getm2() { return a.m2; }
map<string, vector<string>> getm3() { return a.m3; }
}
Run Code Online (Sandbox Code Playgroud)
这些getter函数有多次从类调用B.掌握了cpp的中间知识,我知道getter会按值返回整个地图.但是,这将是更好的参考或使用共享指针到地图等存储构件变量传递它m1,m2,m3 …
我有一个模板类,如果模板参数满足某些条件,某些成员函数才有意义.例如,使用std::enable_if<>我只能为这些情况定义它们,但我怎样才能有条件地调用它们?这是一个简短的例子
template<class T> class A
{
typename std::enable_if<std::is_floating_point<T>::value>::type a_member();
void another_member()
{
a_member(); // how to restrict this to allowed cases only?
}
};
Run Code Online (Sandbox Code Playgroud) 有人可以用例子解释为什么在c ++中重载逗号,地址,逻辑AND和逻辑OR运算符不是一个好习惯吗?
我知道我可以这样使用std::discrete_distribution:
std::default_random_engine generator;
std::discrete_distribution<int> distribution {2,2,1,1,2,2,1,1,2,2};
int p[10]={};
for (int i=0; i<100; ++i) {
int number = distribution(generator);
++p[number];
}
Run Code Online (Sandbox Code Playgroud)
但是,这将根据指定的重量生成0-9范围内的数字.
如何在用户指定的范围内生成数字,例如24-33或95-104等但仍然使用discrete_distribution中指定的分布,我该怎么办?
如果我选择级别警告(全部) /墙
Studio 显示来自此文件的许多警告:
wchar.h
math.h
xmemory0
xstring
Run Code Online (Sandbox Code Playgroud)
例子:
代码:
std::cout << "\n\n";
Run Code Online (Sandbox Code Playgroud)
编译器:
ios(116): 警告 C4710: std::string std::_Generic_error_category::message(int) const:
也许有一些宏,像这样的?
#define start_warnings
#undef start_warnings
Run Code Online (Sandbox Code Playgroud) 我正在进行面向对象编程,我必须Box[10在C++语言中给10个不同的框(由10个元素数组表示)提供不同的名称(physBox1,physBox2 ..... physBox10).
for (G4int i=0; i<10; i++)
{
new G4PVPlacement(0, Box[i],"phyBox[i]");
}
Run Code Online (Sandbox Code Playgroud)
这G4PVPlacement是一个带有三个值的类 - 第二个值Box[i]表示10个框,并且physBox[i]是该框的名称.在这里我很困惑是否physBox[i]将被视为单个字符串,或者[i]根据"for循环"可以在0到9之间运行.