C++委员会有一个范围研究小组:

但我没有按照这个研究组的历史记录,我不确定C++ 1z的预期交付类型(此外我不使用boost.range,所以我没有清楚地了解现有的做法).我们会有:
范围作为一对第一个/最后一个迭代器?
关于范围的联合和其他集合运算(例如[v.begin()+5, v.begin()+7[ U [v.begin()+10, v.begin()+15[ U [v.begin()+21, v.begin()+42[),即:union,intersection,disjoint union,complement?
迭代器过滤器(为了执行满足条件的for_each)?
其他事情?
为了在C++中使用静态数据成员,我目前有类似的东西:
// HEADER FILE .h
class MyClass {
private :
static double myvariable;
};
// CPP FILE .cpp
double MyClass::myvariable = 0;
Run Code Online (Sandbox Code Playgroud)
但如果现在我有:
// HEADER FILE .h
class MyClass {
private :
static double myarray[1000];
};
Run Code Online (Sandbox Code Playgroud)
我该如何初始化它?
谢谢
我正在寻找一种算法,允许我(2^n)%d用n和d 32或64位整数进行计算.
问题是2^n即使使用多精度库也不可能存储在内存中,但是可能存在(2^n)%d仅使用32位或64位整数进行计算的技巧.
非常感谢你.
我有一个看似非常基本的问题,但它是在"每个CPU滴答计数"的背景下(这是将在超级计算机上使用的更大算法的一部分).
问题很简单:对无符号长long int数及其原始索引列表进行排序的最快方法是什么?(开头时,unsigned long long int数字是完全随机的.)
Example :
Before
Numbers: 32 91 11 72
Indexes: 0 1 2 3
After
Numbers: 11 32 72 91
Indexes: 2 0 3 1
Run Code Online (Sandbox Code Playgroud)
通过"最快的方式",我的意思是:使用什么算法:std :: sort,C qsort,或网上提供的其他排序算法?使用什么容器(C数组,std :: vector,std :: map ...)?如何同时对索引进行排序(使用结构,std :: pair,std :: map ...)?
非常感谢你 !
编辑:要排序多少元素? - >通常4Go数字
我正在非常小的常量矢量和矩阵上实现一些线性代数运算的类.当我这样做的时候:
MyMathVector<int, 3> a ={1, 2, 3};
MyMathVector<double, 3> b ={1.3, 2.3, 3.3};
std::cout<<"First = "<<a+b<<std::endl;
std::cout<<"Second = "<<b+a<<std::endl;
Run Code Online (Sandbox Code Playgroud)
然后First = {2, 4, 6}和Second = {2.3, 4.3, 6.3},因为所述第二元件被浇铸到由编译器的第一个元素的类型.是否有任何"简单"的方法来提供与本机C++相同类型的自动转换:int + double = double,double + int = double?
非常感谢你.
编辑:使用答案给出的语法,我得到了运算符+工作.但我尝试了以下语法,编译失败并出现错误:expected a type, got ‘std::common_type<T, TRHS>::type’
#include <iostream>
#include <type_traits>
template<class T> class MyClass
{
public:
MyClass(const T& n) : _n(n) {;}
template<class TRHS> MyClass<typename std::common_type<T, TRHS>::type> myFunction(const MyClass<TRHS>& rhs)
{
return MyClass<std::common_type<T, TRHS>::type>(_n*2+rhs._n);
}
T _n;
}; …Run Code Online (Sandbox Code Playgroud) 如果我们去维基百科关于C++运算符的文章,我们举个例子:
Addition : a + b -> T T::operator +(const T& b) const;
Run Code Online (Sandbox Code Playgroud)
所以运算符返回类型为T 的非const.如果我们看一下这个指南,作者说返回类型应该是一个const,以避免以下语法:
(a+b) = c
Run Code Online (Sandbox Code Playgroud)
现在假设这个语法不会打扰我,并认为a和b是大数组.从"纯"性能的角度来看,返回类型中缺少const关键字是否会阻止编译器的优化(g ++和intel icpc with -O3)?如果aswer是"是",为什么?
请考虑以下代码:
template<unsigned int... TSIZE>
struct Base {};
template<unsigned int TORDER, unsigned int TDIM>
struct Derived : public Base</* TDIM, TDIM, ... TDIM (TORDER times) */> {};
Run Code Online (Sandbox Code Playgroud)
您是否认为在此示例的第二行上正确生成Base的模板参数存在技巧?例如,我想Derived<3, 5>继承Base<5, 5, 5>.怎么做 ?
请考虑以下代码:
#include <iostream>
#include <type_traits>
#include <typeinfo>
struct Base
{
int f() const;
double f();
};
struct Derived
: public Base
{
template <typename T = decltype(std::declval<Derived>().f())> // Modify this
T g() const;
};
int main()
{
const Derived x;
std::cout<<typeid(decltype(x.g())).name()<<std::endl; // Prints "d", not "i"
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何修改decltype(std::declval<Derived>().f())使它返回int而不是double?
我试过decltype(std::declval<const Derived>().f()但它没有编译.
在一个补码架构上考虑以下代码:
int zero = 0;
int negzero = -0;
std::cout<<(negzero < zero)<<std::endl;
std::cout<<(negzero <= zero)<<std::endl;
std::cout<<(negzero == zero)<<std::endl;
std::cout<<(~negzero)<<(~zero)<<std::endl;
std::cout<<(1 << negzero)<<std::endl;
std::cout<<(1 >> negzero)<<std::endl;
Run Code Online (Sandbox Code Playgroud)
我想知道,为什么,在C++中,返回类型std::reverse_iterator::operator[]未指定.不应该std::reverse_iterator::reference吗?