小编Vin*_*ent的帖子

C++ 1z的范围状态?

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

http://isocpp.org/files/img/wg21-structure.png

但我没有按照这个研究组的历史记录,我不确定C++ 1z的预期交付类型(此外我不使用boost.range,所以我没有清楚地了解现有的做法).我们会有:

  1. 范围作为一对第一个/最后一个迭代器?

  2. 关于范围的联合和其他集合运算(例如[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?

  3. 迭代器过滤器(为了执行满足条件的for_each)?

  4. 其他事情?

c++ standards range c++11 c++17

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

C++:初始化静态成员大数组

为了在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)

我该如何初始化它?

谢谢

c++ static

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

算法C/C++:用a和d 32或64位整数计算(2 ^ n)%d的最快方法

我正在寻找一种算法,允许我(2^n)%dn和d 32或64位整数进行计算.

问题是2^n即使使用多精度库也不可能存储在内存中,但是可能存在(2^n)%d仅使用32位或64位整数进行计算的技巧.

非常感谢你.

c++ algorithm 32bit-64bit

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

C++:对数字列表及其索引进行排序的最快方法

我有一个看似非常基本的问题,但它是在"每个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数字

c++ sorting algorithm quicksort

9
推荐指数
2
解决办法
2万
查看次数

C++自动类型转换:容器类的错误行为

我正在非常小的常量矢量和矩阵上实现一些线性代数运算的类.当我这样做的时候:

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++ templates types casting

9
推荐指数
2
解决办法
388
查看次数

重载运算符:const vs非const返回类型:性能的任何差异?

如果我们去维基百科关于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是"是",为什么?

c++ optimization performance operator-overloading

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

您可以从大小及其内容生成可变参数模板包吗?

请考虑以下代码:

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>.怎么做 ?

c++ templates variadic-templates c++11

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

如何获得const限定的declval?

请考虑以下代码:

#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()但它没有编译.

c++ const decltype c++11

9
推荐指数
2
解决办法
620
查看次数

一个补码架构上的负零行为?

在一个补码架构上考虑以下代码:

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++ standards integer ones-complement c++11

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

为什么未指定std :: reverse_iterator :: operator []的返回类型?

我想知道,为什么,在C++中,返回类型std::reverse_iterator::operator[]未指定.不应该std::reverse_iterator::reference吗?

c++ stl language-lawyer c++11

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