小编unk*_*ulu的帖子

是 - >为迭代器my_map.end()定义的第二个?

我正在和一个人一起工作std::map<std::string, MyClass* >.

我想测试是否my_map.find(key)返回特定指针.

现在我正在做;

auto iter = my_map.find(key);
if ((iter != my_map.end()) && (iter->second == expected)) {
    // Something wonderful has happened
}
Run Code Online (Sandbox Code Playgroud)

但是,operator *迭代器的位置需要返回引用.直觉我认为它是有效的并完全初始化?如果是这样,那my_map.end()->second将是NULL,并且(因为NULL从未预料到),我可以将我的if语句减少为:

if (iter->second == expected)
Run Code Online (Sandbox Code Playgroud)

这是否符合规范?有没有人有实际经验?恕我直言,代码变得更加清晰,可能会实现微小的性能提升.

c++ iterator stl

11
推荐指数
1
解决办法
3297
查看次数

在windows mingw下使用zlib

我似乎无法让zlib对windows下的mingw做任何事情.

我下载了zlib @ http://sourceforge.net/projects/mingw/files_beta/MinGW/zlib/zlib-1.2.3-1-mingw32/,并将头文件和lib文件放在正确的位置.

简单的代码如:

#include <stdlib.h>
#include <stdio.h>

#include "zlib.h"

int main(int argc, char *argv[])
{
    long a;
    char buffer[1024];
    a = 1024;
    compress(buffer,&a,"testing",7);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

gcc test.c -lzlib -Wall -o test.exe
Run Code Online (Sandbox Code Playgroud)

编译好.然而,exe在压缩功能崩溃.有任何想法吗?

c windows mingw zlib

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

在2D - C++中生成非退化点集

我想在2D平面中创建一组非退化的大量随机点云(在整个集合中没有直线3个点).我有一个天真的解决方案,它生成一个随机浮点对P_new(x,y),并检查到现在生成的每一对点(P1,P2),如果点(P1,P2,P)位于同一行或不同.这需要对添加到列表中的每个新点进行O(n ^ 2)检查,使得整个复杂度为O(n ^ 3),如果我想生成超过4000个点(超过40分钟),则非常慢.有没有更快的方法来生成这些非简并点?

c++ algorithm computational-geometry

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

是否可以在没有stdlibs的情况下写入控制台?C/C++

我正在使用arm微处理器进行编程,并尝试通过UART使用print语句进行调试.我不想stdlibs只为调试添加.有没有办法打印到控制台没有stdio.h/ iostream.h?我可以写自己的printf()吗?

或者,我可以使用DMA控制器直接写入UART.但是,我想避免这是可能的.使用内置测试功能"echo"或"remote loop-back"我知道我已正确配置UART.

c c++ microcontroller uart

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

构建图表的最佳标准数据结构是什么?

起初我是c ++的初学者,我自学它,所以请回答相当简单......

我需要编写一个包含节点的图形,每个节点都有id和边缘列表,每个边缘都有另一个节点id和距离

我正在寻找的是我应该用什么来构建这个图,因为我想使用dijkstra算法来获得最短的路径从一个点到另一个...所以搜索性能应该是我认为最重要的!

我搜索了很多,现在我很困惑

提前谢谢你的帮助

c++ performance graph data-structures

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

为什么C样式转换允许您转换为私有基类?

假设我们有这个代码

class A {
public:
    A() : x(1) {}
    virtual ~A() {}

    int x;
};

class B {
public:
    B() : y(2) {}
    virtual ~B() {}

    void g()
    {
        cout << "B::" << y << endl;
    }

    int y;
};

class C : private A, private B {
public:
    void f()
    {
        B* p = static_cast<B*>( this );
        p->g();
    }
};

int main()
{
    C c;
    ((B*)&c)->g();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

投在主函数的C风格不能在C++强制类型转换(的角度来正确表达static_cast,dynamic_cast,reinterpret_cast).但是首先允许这个的原因是什么?它不会伤害封装吗?

更新 这不是链接问题的重复,因为这个问题是关于C++中的设计决策.它没有问我能用或不能用语言做什么,它询问为什么可能做出某些决定.

c++ casting class upcasting

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

指向数组的指针数组

我是C编程的新手,这是我的问题:

我想将每个数组的第一个值存储在一个新数组中,然后将每个数组的第二个值存储在一个新数组中,依此类推.

我可以声明指针数组,但我不知道我是如何使用它的!

我需要帮助.

int main()
{
    int t1[4]={0,1,2,3};
    int t2[4]={4,5,6,7};
    int t3[4]={8,9,10,11};
    int t4[4]={12,13,14,15};
    int *tab[4]={t1,t2,t3,t4};
    int i,j,k,l;
    for (i=0; i<4;i++)
    {
        printf("%d\t", *tab[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我只存储每个数组的第一个值.

c

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

有没有办法在不重建任何项目的情况下重新链接解决方案?

我在Visual Studio 2008中有一个很大的C++解决方案,有很多项目,可以链接到其他库.有时我想将解决方案链接到不同的库,为此我创建一个新的exe文件,我需要重新链接解决方案.

但是,只有在至少有一个项目需要重建时才能进行重新链接.所以我手动更改代码中的一行并将其更改回来......

有没有更好的方法来重做链接过程?

c++ linker build-process visual-studio-2008 visual-c++

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

如何在Delphi 2009中声明静态变量?

我用谷歌搜索,我说,我已经看到了其他的"重复",但它们都没有在Delphi 2009中更新到更新4.

就像在C#中一样,我希望在线或尽可能短地创建一个静态变量.最后它就像一个全局变量,但它的排序.

在delphi 2009中最简单的方法是什么?

编辑

我按照你的一些答案,但它不起作用.

类型:

type
TmyClass = class(TObject)
  var staticVar:integer;
end;
Run Code Online (Sandbox Code Playgroud)

码:

procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
begin
  TMyClass.staticVar := 5; // Line 31
  a := TMyClass.staticVar; // Line 32
  MessageBox(0,IntToStr(a),'',0);
end;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[DCC Error] Unit1.pas(31): E2096 Method identifier expected 

[DCC Error] Unit1.pas(32): E2096 Method identifier expected
Run Code Online (Sandbox Code Playgroud)

delphi static class delphi-2009

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

C++:二进制到十进制转换

我试图通过以下方式将二进制数组转换为十进制:

uint8_t array[8] = {1,1,1,1,0,1,1,1} ;
int decimal = 0 ;    

for(int i = 0 ; i < 8 ; i++)
    decimal = (decimal << 1) + array[i] ;
Run Code Online (Sandbox Code Playgroud)

实际上我必须将64位二进制数组转换为十进制数,我必须做几百万次.

任何人都可以帮助我,有没有更快的方法来做到这一点?或者上面的那个好吗?

c++

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