小编NoS*_*tAl的帖子

STL /范围算法计算加权平均值

假设我有一个等级向量,其中等级是

struct Grade{
   const int grade;
   const int ECTS; // weight
};
Run Code Online (Sandbox Code Playgroud)

是否有STL / range-v3算法/算法使我能够做到这一点?

我知道我可以std:: accumulate用一些花哨的类型作为累加器(记住重量的总和)来做到这一点,但是我正在寻找一个更简单的替代方法(如果存在)。

c++ stl weighted-average range-v3

13
推荐指数
2
解决办法
312
查看次数

网站如cplusplus.com for C++ 11

一个简单的问题:是否有人知道像cplusplus.com这样的网站(其功能和标题组织得很好,包括示例(对我来说非常重要))并且它是最新的(C++ 11).

我问,因为我找不到那样的网站.另外,在阅读成员函数和类似内容时,我无法理解c ++标准PDF.

谷歌搜索特定的东西往往是无用的(如果你不相信我试图找到一些原子标题的例子).

c++ sites c++11

12
推荐指数
2
解决办法
1496
查看次数

C++ 11 char16_t strlen-equivalent函数

我有一个简单的问题:是否有办法strlen()在零端接char16_t数组中进行类似字符计数?

strlen c++11 char16-t

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

使用无锁编程深层次的高级抽象不受欢迎的原因是什么?

从我在锁定免费编程上收集到的内容来看,这是非常难以做到的......我同意.只是想一些问题会让我头疼.但我想知道的是,为什么没有广泛使用高级包装器(例如无锁队列和类似的东西)?例如,boost没有锁定免费库,但据我所知,有人建议使用.我的意思是我猜有很多应用程序,你不能避免关键部分是负载的重要部分.那么原因是什么?是吗...

  1. 专利 - 我听说一些与无锁编程相关的东西已获得专利.
  2. 性能.
  3. 谷歌和微软都有像这样的内部库,但没有一个是公开的......
  4. 别的什么?

所以我的问题是:为什么使用无锁编程的高级抽象不是很受欢迎,而同时"常规"多线程编程是"在"?

编辑:boost有一个无锁lib :)

queue boost lock-free concurrent-programming

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

为什么constexpr适用于不纯的功能

在浏览constexpr的一个旧问题时,我偶然发现了一个非常(恕我直言)的重要评论.基本上归结为:(这是合法的C++ 11 :()

 constexpr double f(bool b)
 {
 return b? 42:42/(rand()+1); // how pure is rand ;)
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是标准允许这是什么原因.由于我是参考透明度的忠实粉丝,我希望他们有充分的理由:)我想知道.

顺便说一下,有相关的Q但是大多数A甚至都不提纯东西,或者当他们这样做时,他们没有指明为什么std允许这个的原因. constexpr与纯函数之间的关系

c++ constexpr c++11

12
推荐指数
3
解决办法
605
查看次数

std :: remove和std :: remove_if设计的稳定性是否失败?

最近(从一个SO评论)我了解到std::remove并且std:remove_if稳定.我错误地认为这是一个糟糕的设计选择,因为它阻止了某些优化?

想象一下,删除1M的第一个和第五个元素std::vector.由于稳定性,我们不能remove用swap 实现.相反,我们必须改变所有剩余的元素 :(

如果我们不受稳定性的限制,我们可以(对于RA和BD iter)实际上有2个iters,一个从前面,第二个从后面,然后使用swap来将待移除的项目结束.我相信聪明的人可能会做得更好.我的问题一般,而不是我正在谈论的具体优化.

编辑:请注意C++广告零开销原则,还有std::sortstd::stable_sort排序算法.

EDIT2: 优化将如下所示:

用于remove_if:

  • bad_iter从头开始查找谓词返回true的那些元素.
  • good_iter从最后查看谓词返回false的元素.

当两者都找到了预期时,他​​们就会交换他们的元素.终止是在good_iter <= bad_iter.

如果它有帮助,可以把它想象成快速排序算法中的一个,但是我们不将它们与特殊元素进行比较,而是使用上面的谓词.

EDIT3:我玩过并试图找到最坏的情况(最糟糕的情况remove_if- 注意谓词很少是真的)我得到了这个:

#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <algorithm>
#include <cassert>
#include <chrono>
#include <memory>
using namespace std;
int main()
{  
    vector<string> vsp;
    int n;
    cin >> n;
    for (int i =0; i < n; ++i)
    {   string s = "123456"; …
Run Code Online (Sandbox Code Playgroud)

c++ complexity-theory stl

12
推荐指数
2
解决办法
1555
查看次数

我应该在哪里实现这个"私人"帮助函数?

我的类定义分布在头文件和源文件中:

// T.hpp

class T {
   public:
      void foo();
};

// T.cpp

void T::foo() {

}
Run Code Online (Sandbox Code Playgroud)

如果T::foo需要使用一些T需要可见的辅助函数,以下哪种解决方案最好?

1.私人会员

// T.hpp

class T {
   public:
      void foo();
   private:
      void helper();
};

// T.cpp

void T::foo() {
    helper();
}

void T::helper() {
}
Run Code Online (Sandbox Code Playgroud)

2.仅在类定义的TU中可访问的自由函数

// T.hpp

class T {
   public:
      void foo();
};

// T.cpp

namespace {
    void helper() {}
}

void T::foo() {
    helper();
}
Run Code Online (Sandbox Code Playgroud)

有没有区别,除了前者我会在头文件中有更多的功能?

c++

11
推荐指数
2
解决办法
8397
查看次数

为什么std :: shared_ptr使用原子cpu操作

我有一个问题,理解为什么shared_ptr使用原子CPU指令...我无法弄清楚原因,因为它不是线程安全的.有人可以解释一下.

如果你想知道我是如何知道它使用原子intstuructions:有一个来自C++的剪辑,除了Herb和Andrei谈论它之外,但他们从未提及为什么会这样.

c++ atomic shared-ptr c++11

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

max_digits10的目的是什么?它与digits10的不同之处是什么?

我对什么max_digits10代表感到困惑.根据其文档,对于所有整数类型,它为0.浮点类型的公式max_digits10看起来类似于int's digits10'.

c++ precision numeric-limits floating-point-precision c++11

11
推荐指数
2
解决办法
2404
查看次数

C++ Concepts是否允许我的类在声明/定义中指定它满足某些概念?

目前我能想到的最好的方法是使用static_assert,但我更喜欢更好的方式.

#include <set>
#include <forward_list>

using namespace std;

template<typename C>
concept bool SizedContainer = requires (C c){
    c.begin();
    c.end();
    {c.size()} -> size_t;
};

static_assert(SizedContainer<std::set<int>>);
static_assert(!SizedContainer<std::forward_list<int>>);
static_assert(!SizedContainer<float>);

class MyContainer{
public:
    void begin(){};
    void end(){};
    size_t size(){return 42;}; 
};

static_assert(SizedContainer<MyContainer>);



int main()
{
}
Run Code Online (Sandbox Code Playgroud)

c++ c++-concepts c++20

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