小编Nar*_*oot的帖子

在std :: vector <bool>上调用data()时会发生什么?

C++ 11已经实现了data()成员函数on std::vector,它为你提供了一个指向内存数组的指针.这是否意味着模板专业化std::vector<bool>也有这个成员?由于此专业化不会存储数据,bool *您可以通过调用期望什么样的行为data()

c++ stl c++11

34
推荐指数
2
解决办法
2983
查看次数

可以通过引用传递函数对象吗?

我有一段代码需要传递一个函数对象(函数式)。我不能使用函数指针,因为我需要存储一些状态变量。假设我有很多状态变量。可以通过引用传递函数对象吗?我只见过按值传递的函数对象。这是我的代码的样子:

struct FunctionObject {
    double a, b, x, y;
    double operator() (int v, int w) {....}
};

template <class T>
Class MyClass {
     T& func;
     .....
public:
     MyClass(T& func):func(func) {}
     .....
};
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
634
查看次数

保持频繁插入和删除的小对象的无序列表

假设我有一个小对象列表,我通过频繁的插入和删除迭代(例如,在循环中).但是,我遍历列表的顺序顺序并不重要.我没有使用std :: list存储元素,而是考虑以下列方式使用std :: vector(用于常量时间删除):

插入:使用push_back插入数组的末尾.

删除:假设我想从大小为n的向量中移除位置k处的元素.然后,我将第n个(或(n-1)st的内容,取决于你如何看待它)元素复制到第k个元素并使用pop_back.鉴于元素很小,复制操作不应该是昂贵的.

这是为了利用连续的内存,而不必为每次插入动态分配内存.这种方法有不利之处吗?我也注意到C++ 11有unordered_set,但我认为这可能对我正在尝试做的事情有点过分.

如果这个想法听起来很明显,我道歉.

c++

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

在类定义中推导内联静态成员函数的返回类型

我试图在内联函数定义之后创建一个返回类型的别名来存储成员变量.我在下面简化了我的情况(我想要别名的真实类型比矢量更难以输入,而真正的函数比单行更复杂.)

#include <vector>
using namespace std;
struct Test {
    template <typename T>
    static auto GetVector() { return vector<T>(); }

    using VecInt = decltype(GetVector<int>());
    VecInt x;
};
Run Code Online (Sandbox Code Playgroud)

但是,clang using VecInt在行上给出了以下错误:

错误:具有推导返回类型的函数'GetVector'在定义之前不能使用.

gcc也给我一个类似的错误.奇怪的是,这个编译,虽然它在我的情况下没用:

#include <vector>
using namespace std;
struct Test {
    template <typename T>
    static auto GetVector() { return vector<T>(); }

    void dummy() {
        using VecInt = decltype(GetVector<int>());
        VecInt x;
    }
};
Run Code Online (Sandbox Code Playgroud)

有没有办法让我在内联定义后别名?或者,我可以在结构顶部移动GetVector()函数,代码将编译.但是,我想在那里包含它.

c++ return-type-deduction c++17

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

在多态对象上使用static_cast是否表明存在设计缺陷?

我知道应该避免使用dynamic_cast,但是假设我在我的程序中有一个Base类的对象x,我知道在执行中的某个点也是Derived类(它继承自Base).使用static_cast进行向下转换以调用派生方法等是否可以接受?或者这是否表明存在设计缺陷?

c++

0
推荐指数
2
解决办法
305
查看次数

标签 统计

c++ ×5

c++11 ×1

c++17 ×1

return-type-deduction ×1

stl ×1