小编Nei*_*irk的帖子

减少迭代器

我有一个正常的迭代器到双向数据结构中的位置(实际上是向量).现在我想对当前位置的过去x元素执行操作.之前总会有至少x个元素,尽管最后的x可能是向量的第一个元素.

我写了这段代码

vector<Record>::iterator it = itCurrentRecord;
for (unsigned int i = 0; i < length; i++)
{
    (it--)->length = length;
}
Run Code Online (Sandbox Code Playgroud)

这样安全吗?我担心当它指向第一个元素时,最终的减量将导致迭代器在第一个元素之前指向一个元素,这是无效的.

如果是这样,我怎样才能以安全的方式重写它?

谢谢

c++

6
推荐指数
1
解决办法
4262
查看次数

如何在地图中随机混乱值?

我有一个std :: map,键和值都是整数.现在我想随机地改变地图,所以键随机指向不同的值.我尝试了random_shuffle但它没有编译.请注意,我并没有试图改变键,这对于地图来说没有意义.我试图随机化这些值.

我可以将值推送到一个向量中,然后将其复制然后复制回来.有没有更好的办法?

c++ algorithm stl shuffle map

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

可以使用std :: remove_pointer从指针类型中删除所有间接?

假设我有.. int,int*,int**等.我可以使用std :: remove_pointer或类似的直接输入int吗?谢谢

c++

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

在C++流中包装C风格的文件

对于一个项目,我必须使用C风格的文件类型进行读/写.它可以是常规FILE,也可以是gzfile的C版本等.我仍然喜欢使用C++流的方便性.是否有一个流类在内部重定向到C风格的文件操作?所以myfile << hex << myint最终成为fprintf("%a", myint)或类似的东西?

c++ iostream

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

这里需要extern关键字,const在cpp文件中

如果我有头文件

namespace Bob
{
    extern const T x;
};
Run Code Online (Sandbox Code Playgroud)

并在源文件中

extern const T Bob::x = 123;
Run Code Online (Sandbox Code Playgroud)

extern源文件中的第二个是必需的还是可选的?

我搜索过并发现了相互矛盾的信息.

从这个网页:http: //msdn.microsoft.com/en-us/library/357syhfh.aspx

但是要在C++中获得相同的行为,必须将const变量[在源文件中]声明为:

extern const int i = 2;
Run Code Online (Sandbox Code Playgroud)

c++

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

在C++ 11中创建动态2D矩阵的好方法

我已经知道如何使用new并使用它来创建动态2D矩阵delete.由于C++ 11在这里与许多新的存储器功能,例如unique_ptr,array容器等; 什么是创建2D矩阵的好方法,以便人们不需要使用delete运算符显式释放矩阵?

c++ c++11

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

我想捕获一个异常并将其捆绑在我自己的异常中并向上抛出

我有一个管理资源的课程.它需要一个可以从路径中检索资源的Loader类.Loader是一个抽象基类,所以任何人都可以创建一个新的加载器.

如果请求的资源不在缓存中,资源管理器将从加载器请求它.如果加载器失败,资源管理器会抛出一个名为LoadingError的异常类.

我希望Loader类在失败时抛出异常.如有必要,我可以要求他们从我自己的异常基类继承.

问题是,当抛出LoadingError时,我希望它包含有关失败原因的具体信息.但我不确切知道Loader会抛出什么异常.(用户可能会在资源管理器周围的catch块中).

我可以只使用一些常规信息抛出LoadingError,或者允许Loader中的特定异常出来而不触摸它.但我想捕获异常并将其捆绑在我自己的LoadingError异常中,或者在LoadingError中指向它.但我不知道指向异常将持续多长时间(关注坏指针).

我应该做哪三个?(以及如何,对于第三个..)

谢谢

c++ exception

4
推荐指数
2
解决办法
740
查看次数

尝试使用std :: add_const将T&转换为const T&

我有一个T&具有const和非const版本的函数.我想调用函数的const版本.我尝试使用std :: add_const将T&转换为const T&但它不起作用.我做错了什么,我该如何解决?

这是一个简单的例子.

void f(int&)
{
    std::cout << "int&" << std::endl;
}

void f(const int&)
{
    std::cout << "const int&" << std::endl;
}

int main()
{
    int a = 0;
    int& r = a;
    f(static_cast<std::add_const<decltype (r)>::type>(r));
}
Run Code Online (Sandbox Code Playgroud)

输出: int&

c++

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

可以将functor提供给std :: generate是有状态的吗?

最近我读到如果传递的仿函数是有状态的(有内部副作用),一些STL算法有不确定的行为.我已经将std::generate函数与类似(不太重要)的仿函数一起用于以下内容:

class Gen
{
public:
    explicit Gen(int start = 0)
        : next(start)
    {
    }

    int operator() ()
    {
        return next++;
    }

private:
    int next;
};
Run Code Online (Sandbox Code Playgroud)

这可以安全使用std::generate吗?生成值的顺序是否有保证?

编辑:声明在这里有状态的仿函数和STL:未定义的行为

c++

4
推荐指数
2
解决办法
689
查看次数

用(un)签名的chars重载函数,传递char,是不是要编译?

以下代码将无法在我的编译器上编译.我理解为什么.

void f(signed char x);
void f(unsigned char x);

int main()
{
    char c = 0;
    f(c);
}
Run Code Online (Sandbox Code Playgroud)

signed char,unsigned char并且char是三种不同的类型,这导致重载模糊.

我的问题是,这总是保证是模糊的,因此编译错误?是否有一些规则可选择允许编译器接受此代码?是否存在一些异常但合法的整数大小组合会导致此代码编译?

c++ language-lawyer

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

标签 统计

c++ ×10

algorithm ×1

c++11 ×1

exception ×1

iostream ×1

language-lawyer ×1

map ×1

shuffle ×1

stl ×1