假设我有一个等级向量,其中等级是
struct Grade{
const int grade;
const int ECTS; // weight
};
Run Code Online (Sandbox Code Playgroud)
是否有STL / range-v3算法/算法使我能够做到这一点?
我知道我可以std:: accumulate
用一些花哨的类型作为累加器(记住重量的总和)来做到这一点,但是我正在寻找一个更简单的替代方法(如果存在)。
一个简单的问题:是否有人知道像cplusplus.com这样的网站(其功能和标题组织得很好,包括示例(对我来说非常重要))并且它是最新的(C++ 11).
我问,因为我找不到那样的网站.另外,在阅读成员函数和类似内容时,我无法理解c ++标准PDF.
谷歌搜索特定的东西往往是无用的(如果你不相信我试图找到一些原子标题的例子).
我有一个简单的问题:是否有办法strlen()
在零端接char16_t
数组中进行类似字符计数?
从我在锁定免费编程上收集到的内容来看,这是非常难以做到的......我同意.只是想一些问题会让我头疼.但我想知道的是,为什么没有广泛使用高级包装器(例如无锁队列和类似的东西)?例如,boost没有锁定免费库,但据我所知,有人建议使用.我的意思是我猜有很多应用程序,你不能避免关键部分是负载的重要部分.那么原因是什么?是吗...
所以我的问题是:为什么使用无锁编程的高级抽象不是很受欢迎,而同时"常规"多线程编程是"在"?
编辑:boost有一个无锁lib :)
在浏览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与纯函数之间的关系
最近(从一个SO评论)我了解到std::remove
并且std:remove_if
稳定.我错误地认为这是一个糟糕的设计选择,因为它阻止了某些优化?
想象一下,删除1M的第一个和第五个元素std::vector
.由于稳定性,我们不能remove
用swap 实现.相反,我们必须改变所有剩余的元素 :(
如果我们不受稳定性的限制,我们可以(对于RA和BD iter)实际上有2个iters,一个从前面,第二个从后面,然后使用swap来将待移除的项目结束.我相信聪明的人可能会做得更好.我的问题一般,而不是我正在谈论的具体优化.
编辑:请注意C++广告零开销原则,还有std::sort
和std::stable_sort
排序算法.
EDIT2: 优化将如下所示:
用于remove_if
:
当两者都找到了预期时,他们就会交换他们的元素.终止是在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) 我的类定义分布在头文件和源文件中:
// T.hpp
class T {
public:
void foo();
};
// T.cpp
void T::foo() {
}
Run Code Online (Sandbox Code Playgroud)
如果T::foo
需要使用一些只T
需要可见的辅助函数,以下哪种解决方案最好?
// 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)
// T.hpp
class T {
public:
void foo();
};
// T.cpp
namespace {
void helper() {}
}
void T::foo() {
helper();
}
Run Code Online (Sandbox Code Playgroud)
有没有区别,除了前者我会在头文件中有更多的功能?
我有一个问题,理解为什么shared_ptr使用原子CPU指令...我无法弄清楚原因,因为它不是线程安全的.有人可以解释一下.
如果你想知道我是如何知道它使用原子intstuructions:有一个来自C++的剪辑,除了Herb和Andrei谈论它之外,但他们从未提及为什么会这样.
我对什么max_digits10
代表感到困惑.根据其文档,对于所有整数类型,它为0.浮点类型的公式max_digits10
看起来类似于int
's digits10
'.
目前我能想到的最好的方法是使用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)