小编Tam*_*lei的帖子

如何实现STL样式的迭代器并避免常见的陷阱?

我创建了一个集合,我想提供一个STL风格的随机访问迭代器.我正在寻找迭代器的示例实现,但我没有找到任何.我知道需要const重载[]*运算符.迭代器有什么要求是"STL风格",还有哪些其他缺陷需要避免(如果有的话)?

附加上下文:这是一个库,除非我真的需要,否则我不想引入任何依赖.我编写自己的集合,以便能够使用相同的编译器在C++ 03和C++ 11之间提供二进制兼容性(因此没有STL可能会破坏).

c++ iterator const-iterator

286
推荐指数
5
解决办法
17万
查看次数

c ++中"泛型编程"的含义是什么?

c ++ 中泛型编程的含义是什么?

此外,我试图找出容器,迭代器和它们的不同类型的含义.

c++

54
推荐指数
3
解决办法
6万
查看次数

基于内容的CSS规则

我想对包含特定单词的所有锚应用不同的样式.它可以在纯CSS中完成吗?如果它只是CSS3,那没关系.

css css3

35
推荐指数
3
解决办法
5万
查看次数

QML中的图像圆角

令我惊讶的是,该Image组件没有radius属性.我尝试通过将图像放在圆形中来模拟圆角Rectangle,但它不会剪切角落.

Rectangle {
    anchors.right: rectContentBg.left
    anchors.top: rectContentBg.top
    anchors.margins: 8

    radius: 8

    width: 64
    height: 64

    Image {
        id: imgAuthor

        opacity: 1
        smooth: false

        anchors.fill: parent

        source: "qrc:/res/sample_avatar.jpg"
    }
}
Run Code Online (Sandbox Code Playgroud)

如何正确创建圆角图像?

qml qt5 qtquick2

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

为什么静态和动态可链接库不同?

如果它们都包含已编译的代码,为什么我们不能在运行时加载"静态"文件,为什么我们不能在编译时链接动态库?为什么需要单独的格式来包含"独立"代码?什么需要存储哪个保证差异?

language-agnostic linker loader

28
推荐指数
3
解决办法
1886
查看次数

在OpenGL中获得流畅,重要的一点

我开始玩OpenGL和GLUT.我想提出一些观点,但问题是它们变成了正方形,我希望它们是圆点(圆圈).

这就是我做的:

void onInitialization( ) 
{ 
    glEnable( GL_POINT_SMOOTH );
    glEnable( GL_BLEND );
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
    glPointSize( 6.0 );
}    

void onDisplay()
{
    glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glBegin( GL_POINTS );
        glColor3f( 0.95f, 0.207, 0.031f );
    for ( int i = 0; i < g_numPoints; ++i )
    {
        glVertex2f( g_points[i].X, g_points[i].Y );
    }
    glEnd();
    glFinish();
    glutSwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)

这是结果: 上述代码的结果

积分显示在预期的位置,只有它们的形状是错误的.

c opengl glut

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

为什么std :: list在c ++ 11上更大?

使用此代码:

#include <iostream>
#include <list>

int main() {
    std::cout << sizeof(std::list<void*>) << std::endl;
};
Run Code Online (Sandbox Code Playgroud)

我注意到在GCC 4.7 std::list<void*>上,C++ 98 的大小是16字节,而它在C++ 11上的大小是24字节.

我想知道std :: list上有什么变化让它更大了.

c++ gcc c++11 c++98

27
推荐指数
1
解决办法
2941
查看次数

什么是overflow_usub?

Linus Torvalds最近以拉动请求为主流新闻.这个拉取请求包含一个函数,overflow_usub它显然是非标准的并且使用某种编译魔术.由于这种咆哮的广泛报道,几乎不可能找到关于这个功能的任何有用信息.我的问题是:什么是什么overflow_usub,何时应该使用它需要什么样的编译器魔术?

c linux-kernel

21
推荐指数
1
解决办法
4779
查看次数

如何拆分元组?

给出一个

   template<typename First, typename... Tail>
   struct something
   {
       std::tuple<First, Tail...> t;
   };
Run Code Online (Sandbox Code Playgroud)

如何获得std::tuple<Tail...>包含t除第一个元素之外的所有元素的元素?


我认为这是一个有趣的问题,但这是我对背景的动机:

我想为元组实现哈希.我用这个答案作为基础.我发现它有一个错误,即没有调用operator()带有值的哈希对象:

return left() ^ right();
Run Code Online (Sandbox Code Playgroud)

应该:

return left(std::get<0>(e)) ^ right(???);
Run Code Online (Sandbox Code Playgroud)

??? 将是元组的剩余元素继续模板的递归实例化.以下是完整的代码,包括终止部分:

#include <functional>
#include <utility>

namespace std
{

template<typename First, typename... Tail>
struct hash<std::tuple<First, Tail...>>
{
    typedef size_t result_type;
    typedef std::tuple<First, Tail...> argument_type;

    result_type operator()(argument_type const& e) const
    {
        std::hash<First> left;
        std::hash<std::tuple<Tail...>> right;
        return left(std::get<0>(e)) ^ right(???);
    }
};

template<>
struct hash<std::tuple<>>
{
    typedef size_t result_type;
    typedef …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

18
推荐指数
2
解决办法
4877
查看次数

GCC可以编译的最小,最简单的CPU是什么?

在指令集和仿真的简单性方面.我想实现一个虚拟CPU,并想出为什么不模拟现有的,所以能够编译C代码.

cpu gcc emulation

17
推荐指数
3
解决办法
5924
查看次数