小编Wal*_*ter的帖子

在c ++性能问题中使用getter返回映射

我有一个类有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 …

c++ stdmap std rvo

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

C++中的编译时条件成员函数调用

我有一个模板类,如果模板参数满足某些条件,某些成员函数才有意义.例如,使用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++ templates c++11

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

为什么逗号,地址,逻辑AND和逻辑OR运算符不应该在c ++中重载?

有人可以用例子解释为什么在c ++中重载逗号,地址,逻辑AND和逻辑OR运算符不是一个好习惯吗?

c++ oop operator-overloading logical-operators c++11

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

指定范围的随机数的std :: discrete_distribution

我知道我可以这样使用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中指定的分布,我该怎么办?

c++ random c++11 c++14

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

是否可以关闭编译器警告?

如果我选择级别警告(全部) /墙

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)

c++ visual-studio visual-studio-2013

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

如何在字符串(名称)中使用循环变量

我正在进行面向对象编程,我必须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之间运行.

c++ loops objective-c++

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