小编Dou*_* T.的帖子

像数组一样访问c ++队列元素

可以像数组一样访问队列元素吗?如果没有,那么类似于队列的容器可以吗?

c++ queue stl

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

如何从stl数据结构中删除reverse_iterator?

由于某种原因,以下代码失败.您不能简单地使用其base()方法擦除reverse_iterator.

#include <set>
#include <iostream>

int main()
{
    std::set<int> setOfInts;
    setOfInts.insert(1);
    setOfInts.insert(2);
    setOfInts.insert(3);

    std::set<int>::reverse_iterator rev_iter = setOfInts.rbegin();
    std::set<int>::reverse_iterator nextRevIter = setOfInts.rbegin();
    ++nextIter;

    while ( rev_iter != setOfInts.rend())
    {
        // Find 3 and try to erase
        if (*rev_iter == 3)
        {
            // SEGFAULT HERE
            setOfInts.erase( rev_iter.base());
        }
        rev_iter = nextRevIter;
        ++nextRevIter;
    }

}
Run Code Online (Sandbox Code Playgroud)

如何正确地做上述事情?如果reverse_iterator对应于您想要擦除的内容,那么如何删除它?

注意,遗憾的是不会使用reverse_iterator.它想要真实的东西.

c++ iterator stl

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

13
推荐指数
2
解决办法
8931
查看次数

最好返回C++引用或weak_ptr?

假设我有一个类,我希望用户能够引用我的一个成员.哪个更受欢迎?

class Member;

class ClassWithWeakPtr
{
private:
   boost::shared_ptr<Member> _member;
public:
   boost::weak_ptr<Member> GetMember();
};
Run Code Online (Sandbox Code Playgroud)

要么

class Member;

class ClassWithCppReference
{
private:
    Member _member;
public:
    Member& GetMember() {return _member;}
};
Run Code Online (Sandbox Code Playgroud)

你怎么看?什么时候比另一个更好?

c++ boost reference

12
推荐指数
2
解决办法
7297
查看次数

我应该停止使用抽象基类/接口而是使用boost :: function/std :: function吗?

我刚刚了解了std :: function到底是什么以及它用于什么,我有一个问题:现在我们基本上有代理,我们应该在何时何地使用抽象基类,何时我们应该实现多态性通过std :: function对象提供给泛型类?ABC在C++ 11中受到了致命打击吗?

就个人而言,到目前为止,我的经验是切换委托代码比为特定行为创建多个继承类要简单得多......所以我有点困惑abotu从现在起如何有用的Abstract Bases.

c++ design-patterns stl c++11

12
推荐指数
1
解决办法
1527
查看次数

全局const字符串并且闻起来对我不好,它真的安全吗?

我正在审查一个同事的代码,我发现他在全球范围内定义了几个常量:

const string& SomeConstant = "This is some constant text";
Run Code Online (Sandbox Code Playgroud)

就个人而言,这对我来说闻起来很糟糕,因为引用是指我假设的是一个从给定的char数组构造的"匿名"对象.

从语法上讲,它是合法的(至少在VC++ 7中),它似乎运行,但实际上我宁愿让他删除&因此对它正在做什么没有歧义.

那么,这真的很安全合法吗?我很着迷吗?构造的临时对象是否具有保证的寿命?我一直认为以这种方式使用的匿名对象在使用后被破坏了......


所以我的问题也可以推广到匿名对象的生命周期.标准是否规定了匿名对象的生命周期?它是否与同一范围内的任何其他对象具有相同的生命周期?或者只给出表达式的生命周期?


此外,当它作为本地时,它显然有不同的范围:

class A
{
    string _str;

public:
    A(const string& str) :
        _str(str)
    {
        cout << "Constructing A(" << _str << ")" << endl;
    }

    ~A()
    {
        cout << "Destructing A(" << _str << ")" << endl;
    }
};

void TestFun()
{
    A("Outer");
    cout << "Hi" << endl;
}
Run Code Online (Sandbox Code Playgroud)

显示:

构建A(外部); 破坏A(外); 你好

c++ string anonymous const object

11
推荐指数
3
解决办法
1827
查看次数

Mutex示例中未处理的异常/访问冲突写入位置

我正在研究一个使用互斥锁来保护全局双精度的例子,但是我得到了错误 -

Lab7.exe中0x77b6308e处的未处理异常:0xC0000005:访问冲突写入位置0x00000068.

我认为这与获得分数有关?(全球双倍)

#include <windows.h>
#include <iostream>   
#include <process.h>

double score = 0.0; 


HANDLE threads[10];     

CRITICAL_SECTION score_mutex; 


unsigned int __stdcall MyThread(void *data)
{
    EnterCriticalSection(&score_mutex);
    score = score + 1.0; 
    LeaveCriticalSection(&score_mutex); 

    return 0;
}

int main()
{
    InitializeCriticalSection(&score_mutex); 

    for (int loop = 0; loop < 10; loop++)
    {

        threads[loop] = (HANDLE) _beginthreadex(NULL, 0, MyThread, NULL, 0, NULL); 
    }

    WaitForMultipleObjects(10, threads, 0, INFINITE); 

    DeleteCriticalSection(&score_mutex); 

    std::cout << score; 

    while(true);

}
Run Code Online (Sandbox Code Playgroud)

更新:

在将循环设置为1000而不是10来解决问题之后,错误仍然存​​在,但是当我注释掉引用互斥锁的代码时,错误没有发生.

CRITICAL_SECTION score_mutex; 
EnterCriticalSection(&score_mutex); 
LeaveCriticalSection(&score_mutex); 
InitializeCriticalSection(&score_mutex); 
DeleteCriticalSection(&score_mutex); 
Run Code Online (Sandbox Code Playgroud)

更新2

线程按照惯例返回0(这是一个漫长的一周!)

我尝试在互斥量相关的代码中添加,并且程序将编译并运行正常(除了竞争条件问题与双重当然)与CRITICAL_SECTION,InitializeCriticalSection和DeleteCriticalSection都重新加入.问题似乎与EnterCriticalSection或LeaveCriticalSection,因为我添加它时错误再次出现.

c++ winapi multithreading critical-section waitformultipleobjects

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

在探测程序集时,为什么在以管理员身份和普通用户身份运行时搜索到的publicKeyToken会有所不同?

我正在按照2006年Microsoft .Net课程练习册的说明进行其中一个练习.(具体来说,本课程是MS2349B,我正在进行第4单元练习2).这些练习似乎是为Vista之前的每个人都拥有完全管理员权限而构建的.(我正在使用.net 4.0.)

此练习涉及构建强名称程序集,将其安装在GAC中,针对强名称程序集构建本地可执行文件,验证可执行文件是否运行.

根据教程,我使用#if 块来签署我的程序集:

#if STRONG
[assembly: System.Reflection.AssemblyVersion("2.0.0.0")]
[assembly: System.Reflection.AssemblyKeyFile("OrgVerKey.snk")]
#endif
Run Code Online (Sandbox Code Playgroud)

我以本地用户身份构建可执行文件:

C:\path\to\lab>csc /define:STRONG /target:library 
 /out:AReverser_v2.0.0.0\AReverser.dll AReverser_v2.0.0.0\AReverser.cs
C:\path\to\lab>csc /reference:MyStringer\Stringer.dll     
 /reference:AReverser_v2.0.0.0\AReverser.dll Client.cs
Run Code Online (Sandbox Code Playgroud)

我通过以管理员身份运行的visual studio命令提示符将其安装到GAC中:

C:\path\to\lab>gacutil /i AReverser_v2.0.0.0\AReverser.dll
Run Code Online (Sandbox Code Playgroud)

当我在管理员提示符下运行我的exe时,我得到了我期望的输出 - 应用程序运行正常并且似乎正确地从gac加载dll.当我在非管理命令提示符下运行时,我收到以下错误

Unhandled Exception: System.IO.FileLoadException: Could not load file or assembl
y 'AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b5fcbdcff229fabb'
 or one of its dependencies. The located assembly's manifest definition does not
 match the assembly reference. (Exception from HRESULT: 0x80131040)
   at MainApp.Main()
Run Code Online (Sandbox Code Playgroud)

对我来说奇怪的是publicKeyToken与GAC中的内容不同:

AReverser, Version=2.0.0.0, Culture=neutral, PublicKeyToken=f0548c0027634b66
Run Code Online (Sandbox Code Playgroud)

但是,如果我从GAC卸载AReverser并尝试运行我的exe作为管理员提示我收到以下错误,表明它正在寻找预期的公钥令牌f0548c0027634b66:

C:\path\to\lab>gacutil /u "AReverser,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=f0548c0027634b66"
Microsoft (R) …
Run Code Online (Sandbox Code Playgroud)

.net c# assemblies gac

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

python是否有类似C++的关键字?

在C++中,您通常可以通过仔细使用"using"关键字来大幅提高代码的可读性,例如:

void foo()
{
    std::vector< std::map <int, std::string> > crazyVector;
    std::cout << crazyVector[0].begin()->first;
}
Run Code Online (Sandbox Code Playgroud)

void foo()
{
    using namespace std; // limited in scope to foo
    vector< map <int, string> > crazyVector;
    cout << crazyVector[0].begin()->first;
}
Run Code Online (Sandbox Code Playgroud)

python是否存在类似的东西,或者我是否必须完全限定所有内容?

我将添加免责声明,我知道使用有其缺陷,应该适当限制范围.

python namespaces using

8
推荐指数
3
解决办法
9369
查看次数

关于C++中多继承的问题?

我有以下代码:

#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
#define MNAME 30
class Person {
public:
    char name[MNAME + 1];
};
class Student : public Person {
};
class Staff : public Person {
};
class Faculty : public Student, public Staff {
};

int _tmain(int argc, _TCHAR* argv[])
{
    Faculty faculty;
    cout << "Address of faculty.Person::name: " << &faculty.Person::name << endl;
    cout << "Address of faculty.Student::name: " << &faculty.Student::name << endl;
    cout << "Address of faculty.Staff::name: " << …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance multiple-inheritance diamond-problem

8
推荐指数
2
解决办法
638
查看次数