小编Fra*_*ier的帖子

为什么要将类型放在未命名的命名空间中?

我理解使用未命名的命名空间来使函数和变量具有内部链接.头文件中不使用未命名的命名空间; 只有源文件.源文件中声明的类型不能在外部使用.那么在未命名的命名空间中放置类型有什么用呢?

请参阅这些链接,其中提到的类型可以放在未命名的命名空间中:

c++ unnamed-namespace

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

成语将C++类初始化为零

考虑以下C++类:

struct Point
{
    int x;
    int y;

    explicit Point() =default; // 1
    explicit Point(int x_, int y_): x(x_), y(y_) { } // 2
};
Run Code Online (Sandbox Code Playgroud)

第二个构造函数用于创建Point具有特定值xy值的构造函数.第一个存在,以便我可以默认构造一个Point.然而,为了提高效率,这是defaultED和不设置xy为零.如果我确实想将所有成员设置为零,我可以有另一个构造函数:

explicit Point(int val) : x(val), y(val) { } // 3
Run Code Online (Sandbox Code Playgroud)

这样,我可以选择默认初始化Point,或者将所有成员设置为零来初始化它:

Point p1;    // Don't initialize members.
Point p2(0); // Initialize all members to zero.
Run Code Online (Sandbox Code Playgroud)

第三个构造函数的问题是我可以传递任何值,而不仅仅是零.例如:

Point p(1); // Both x and y set to 1! Is this …
Run Code Online (Sandbox Code Playgroud)

c++ construction idioms initialization zero

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

提出了一种用于对大型对象数组进行排序的算法; 任何人都可以告诉我这个算法叫什么?(在Google上找不到)

我需要对一大堆大型物体进行排序,这让我想到:有没有办法减少掉期数量?

所以我使用quicksort(但任何其他快速排序也应该在这里工作)来将索引排序到数组中的元素; 指数交易便宜.然后我使用这些索引将实际对象交换到它们的位置.不幸的是,这使用O(n)额外空间来存储索引.下面的代码说明了算法(我称之为IndexSort),在我的测试中,对于大型对象的数组,它似乎比plain quicksort快.

template <class Itr>
void IndexSort(Itr begin, Itr end)
{
    const size_t count = end - begin;

    // Create indices
    vector<size_t> ind(count);
    iota(ind.begin(), ind.end(), 0);

    // Sort indices
    sort(ind.begin(), ind.end(), [&begin] (const size_t i, const size_t j)
    {
        return begin[i] < begin[j];
    });

    // Create indices to indices. This provides
    // constant time search in the next step.
    vector<size_t> ind2(count);
    for(size_t i = 0; i < count; ++i)
        ind2[ind[i]] = i;

    // …
Run Code Online (Sandbox Code Playgroud)

c++ arrays sorting algorithm

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