小编Eri*_*rik的帖子

是否可以使用构造函数将2D Vector初始化为C++中的单行程?

是否可以初始化这样的2D矢量(这里5x4 2D矢量中的所有值都被初始化为3)?

std::vector<std::vector<int> > foo(5, std::vector<int>(4, 3));
Run Code Online (Sandbox Code Playgroud)

这似乎表现得很好,但是我在网上看到的每个人似乎都建议使用for循环和push_back()来初始化这样的向量.我最初担心这里的所有行都会指向相同的向量,但事实并非如此.我错过了什么吗?

c++ constructor stl 2d vector

7
推荐指数
1
解决办法
1069
查看次数

隐藏模板类中的成员函数

是否可以在模板类中隐藏一些成员函数?让我们想象我们有类似的东西:

template <class T>
class Increment
{
public:
    void init(T initValue)
    {
         mValue = initValue;
    }  

    T increment()
    {
        ++mValue;
    }

    T increment(T delta)
    {
        mValue += delta;
    }
private:
    T mValue;
};
Run Code Online (Sandbox Code Playgroud)

目标是使用这个类,在某些情况下我们只看到increment()函数,在其他情况下我们只看到increment(T)成员函数.要做到这一点,我可以考虑SFINAE的一些事情:

class MultipleIncrement
{
    typedef int MultipleIncrement_t;
};

class SingleIncrement
{
    typedef int SingleIncrement_t;
};

template <class T, class Q>
class Increment
{
public:
    void init(T initValue)
    {
        mValue = initValue;
    }

    T increment(typename Q::SingleIncrement_t = 0)
    {
        ++mValue;
    }

    T increment(T delta, typename Q::MultipleIncrement_t = 0) …
Run Code Online (Sandbox Code Playgroud)

c++ templates hide sfinae

7
推荐指数
1
解决办法
1230
查看次数

诺基亚是否误用了static_cast?

我刚刚看到这个例子:

向下滚动到页面底部,您将找到该页面

QWidget *pw = static_cast<QWidget *>(parent);
Run Code Online (Sandbox Code Playgroud)

Parent是类型:QObject,它是QWidget的Base类,所以在这种情况下,isnt:dynamic_cast应该使用?

如:

QWidget *pw = dynamic_cast<QWidget*>(parent)
Run Code Online (Sandbox Code Playgroud)

谢谢,

c++ qt pointers casting

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

LNK2022和LNK2034链接器错误与CRT版本10.0

很抱歉打扰这个问题的人,但我已经研究了几个小时了,还没有决议:

我正在将一个相当庞大的应用程序移植到Visual Studio 2010中的10.0 CRT(编译器).该应用程序是使用/ clr管理的C++/CLI.大多数代码都是本机代码(95%),其中包含一些托管部分.

所以我的工作是将.vcxproj中的开关定位到较新的10.0 CRT(即编译器).我们以前使用的是v90,或者使用VS 2008 SP1附带的VC编译器.

好的,这么重大变化?实际上看起来像一堆.我修复了一些处理集合的迭代器问题,这一切都非常简单.

但这些链接器错误正在扼杀我.任何帮助,将不胜感激:

1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0001c0).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0001c5).
...

1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0?$allocator@D@std@@$$FQAE@ABV01@@Z' (06000141) has inconsistent metadata with (0A000F75) in identity.obj
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0?$allocator@D@std@@$$FQAE@ABV01@@Z' (06000141) has inconsistent metadata with …
Run Code Online (Sandbox Code Playgroud)

windows winapi stl linker-errors visual-studio-2010

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

函数在c ++中返回此指针

第一个代码:

#include <iostream>
using namespace std;
class demo
{
  int a;
public:
  demo():a(9){}
  demo& fun()//return type isdemo&
  {
    return *this;
  }
};

int main()
{
  demo obj;
  obj.fun();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

第二个代码:

#include <iostream>
using namespace std;
class demo
{
  int a;
public:
  demo():a(9){}
  demo fun()//return type is demo
  {
    return *this;
  }
};

int main()
{
  demo obj;
  obj.fun();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这两个代码有什么区别,因为两个代码都在gcc中工作?我是新来的,所以请原谅我,如果我的提问方式是错误的.

c++

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

C/C++:如果解析这个内联怎么样?

考虑以下代码:

int main()
{
    cout << true ? "Yes" : "No";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的输出将是1,不会YesNo.为什么它true被发送到输出流而不是YesNo字符串?如果得到解析,内联的其余部分如何?

c++ ternary-operator

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

矢量初始化在构造函数中

是否有必要初始化;

- vector<string>
- vector<string*>
Run Code Online (Sandbox Code Playgroud)

在构造函数?

c++ vector

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

Linux和Windows:使用大文件来保存物理内存

下午好,我们已经实现了一个C++ cKeyArray类来测试我们是否可以使用Large File API来节省物理内存.在Centos Linux测试期间,我们发现Linux File API与使用堆进行随机访问处理一样快.以下是数字:对于2,700,000行SQL数据库,其中每行的KeySize为62字节,

使用LINUX文件API的cKeyArray类BruteForceComparisons = 197275 BruteForceTimeElapsed = 1,763,504,445微秒每个BruteForce Comparisons需要两次随机访问,每次随机访问所需的平均时间= 1,763,504,445微秒/(2*197275)= 4470微秒

堆,没有cKeyArray类

BruteForceComparisons = 197275 BruteForceTimeElapsed = 1,708,442,690microsecs每次随机访问所需的平均时间= 4300微秒.

在32位Windows上,数字是,

使用Windows文件API的cKeyArray类BruteForceComparisons = 197275 BruteForceTimeElapsed = 9243787毫秒每次随机访问的平均时间是23.4毫秒

堆,没有cKeyArray类BruteForceComparisons = 197275 BruteForceTimeElapsed = 2,141,941毫秒每个随机访问所需的平均时间是5.4毫秒

我们想知道为什么Linux cKeyArray数字和Linux堆数一样好,而在32位Windows上,平均堆随机访问时间是cKeyArray Windows File API的4倍.有什么方法可以加快Windows cKeyArray文件API的速度吗?

之前,我们收到了Stack Overflow关于使用Windows内存映射文件API的许多好建议.基于这些Stack Overflow建议,我们实现了一个正常运行的内存映射文件MRU缓存类.

因为我们想要开发一个跨平台的解决方案,我们希望尽职尽责地了解为什么Linux File API如此之快?谢谢.我们试图在下面发布一部分cKeyArray类实现.

#define KEYARRAY_THRESHOLD 100000000   
// Use file instead of memory if requirement is above this number


cKeyArray::cKeyArray(long RecCount_,int KeySize_,int MatchCodeSize_, char* TmpFileName_) {
    RecCount=RecCount_;
    KeySize=KeySize_;
    MatchCodeSize=MatchCodeSize_;
    MemBuffer=0;
    KeyBuffer=0;
    MemFile=0;
    MemFileName[0]='\x0';
    ReturnBuffer=new char[MatchCodeSize …
Run Code Online (Sandbox Code Playgroud)

c++ linux windows

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

在这种情况下使用DataStructure

我有以下形式的数据 -

01/04/2011  - {00:00,1.0} ; {01:00,2.0} ; {02:00,1.5} ;{04:00,2.3} 
02/04/2011  - {00:00,2.0} ; {01:00,2.1} ; {02:00,1.5} ;{04:00,2.3}
03/04/2011  - {00:00,3.0} ; {01:00,2.0} ; {02:00,1.6} ;{04:00,2.3}
04/04/2011  - {00:00,1.0} ; {01:00,2.5} ; {02:00,1.57} ;{04:00,2.3}
05/04/2011  - {00:00,1.9} ; {01:00,2.7} ; {02:00,1.5} ;{04:00,2.3}
06/04/2011  - {00:00,1.08} ; {01:00,2.02} ; {02:00,1.9} ;{04:00,2.3}
07/04/2011  - {00:00,1.7} ; {01:00,2.0} ; {02:00,1.10} ;{04:00,2.3}
Run Code Online (Sandbox Code Playgroud)

我必须将它们存储在某些DataStructure中,以便我可以使用日期作为键来访问它们.同样,对于特定的日期,{k,v}对应按插入方式排序.

请建议哪个是在这种情况下使用的最佳DataStructure,以及应该使用它的原因.提前致谢!

java data-structures

0
推荐指数
1
解决办法
218
查看次数

一个c ++计时器阻止了我的整个课程?

我想有一些合理且简单的解决方案.所以我举例说:

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

time(2)

// anything else in the about class....

//return code

}
Run Code Online (Sandbox Code Playgroud)

问题是整个应用程序几乎冻结,除了"等待计时器"我什么也做不了.如何使计时器运行与其他任何操作无关?10倍!

c++ visual-c++

0
推荐指数
1
解决办法
84
查看次数

如何在Haskell中的递归函数中终止?

我有一个需要在某种条件下终止的函数.例如,我们说我们有以下功能:

func :: Int -> [[Int]] -> [[Int]]

func _ [] = []

func x (a:as) = func2 x a:func x as
Run Code Online (Sandbox Code Playgroud)
func2 :: Int -> [Int] -> [Int]

func2 _ [] = []

func2 x (a:as) = x*a:func2 x as
Run Code Online (Sandbox Code Playgroud)

让我们说我希望func one被称为正常,但每当我们在[[Int]]输入中得到负值时,我们就会终止.所以我们只处理正值.所以你怎么能让func2发送一些信号来退出整个过程而不是继续?

recursion haskell termination

0
推荐指数
1
解决办法
3772
查看次数