小编Ker*_* SB的帖子

用于地图的联合迭代器?

[ 前言:关联的C++容器std::map有点像只有一个关键列的微数据库.Boost bimap将它提升为一个两列的表,在两列中都有查找,但这就像这个类比一样 - 没有"polymap"概括了这个想法.

无论如何,我想继续将地图视为数据库,现在我想知道是否有一个迭代器(或其他解决方案)允许我做几个组成映射的UNION.也就是说,所有的地图都有相同的类型(或者至少是值类型和比较器),我想要一个迭代器将整个集合视为一个大的多重映射(重复的键都可以),让我在正确的联合中遍历它订购.

这样的事情是否存在,也许在Boost中?或者是否容易装备?在伪代码中:

std::map<K, M> m1, m2;
union_iterator<K, M> u(m1, m2)
for(auto it = u.begin(); it != u.end(); ++it) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

例如,如果我们有:

m1 = { { 9:00, "Check in"}, { 12:00, "Break" }, { 16:00, "Check out"} };
m2 = { { 10:30, "coffee" }, { 12:15, "baked beans" }, { 15:00, "lies" } };
Run Code Online (Sandbox Code Playgroud)

然后我想要迭代器生成:

9:00, "Check in"; 10:30, "coffee"; 12:00, "Break"; 12:15, "baked beans"; ...
Run Code Online (Sandbox Code Playgroud)

c++ iterator map

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

std :: string如何使用-fwhole-program在GCC中分配内存?

更新:以下问题似乎取决于该-fwhole-program选项.

我一直在玩内存分配,我遇到了一个小小的谜团:在GCC(4.6)中,当我用[/] 编译时如何std::string分配它的内存[ edit-fwhole-program ]?

有以下测试程序:

#include <new>
#include <string>
#include <iostream>
#include <cstdlib>

void * operator new(std::size_t n) throw(std::bad_alloc)
{
  void * const p = std::malloc(n);

  if (p == NULL) throw std::bad_alloc();

  std::cerr << "new() requests " << n << " bytes, allocated at " << p << ".\n";

  return p;
}

void operator delete(void * p) noexcept
{
  std::cerr << "delete() at " << p << ".\n";
  std::free(p);
}

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11

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

Android NDK C++'wstring'支持

我有用C++编写的源代码/ lib - 现在我想在Android NDK项目(NDK 6)中编译和使用相同的代码.我能够编译大多数C++文件,除了基于"std :: wstring"的功能.

在Application.mk中,当我指定APP_STL: = stlport_static它然后它编译std::wstring基于代码,但当我指定APP_STL: = gnustl_static它无法编译.我不知道如何解决std::wstring相关问题APP_STL: = gnustl_static

任何指针或帮助将非常感激.

c++ android wstring android-ndk

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

输入trait以获取默认参数促销

[免责声明:我知道这个问题的答案.我认为这可能有一些普遍的兴趣.]

问题:我们怎样才能有一个类型特征产生由执行默认参数促销产生的类型?

动机:我希望能够可移植地使用变量参数.例如:

void foo(char const * fmt, ...);  // Please pass: * unsigned short
                                  //              * bool
                                  //              * char32_t
                                  //              * unsigned char
Run Code Online (Sandbox Code Playgroud)

当将参数传递给没有参数的函数调用时,即匹配省略号时,参数会进行默认参数提升.到目前为止一直很好,但这些促销是依赖于平台的.我可以恢复参数va_arg(ap, T),但是什么T

现在,对于一些简单的情况,这很容易:例如,我总是可以说:

unsigned short n = va_args(ap, unsigned int);
Run Code Online (Sandbox Code Playgroud)

默认促销将导致a signed int或an unsigned int,但根据,例如,C11 7.16.1.1/3,va-casting unsigned int总是很好,因为即使默认促销结果为a int,原始值也可以由两者表示类型.

但是当我期待一个类型时,我应该选择什么类型char32_t?C++ 11 4.5/2使得结果类型大开.所以我想要一个让我写的特质:

char32_t c = va_args(ap, default_promote<char32_t>::type);
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

当参数类型不能作为变量参数传递时,产生静态断言的特征的加值点.

c++ variadic-functions type-traits

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

有没有办法检查std :: random_device是否实际上是随机的?

引用cppreference:

std :: random_device是一个非确定性随机数引擎,但如果不支持非确定性随机数生成,则允许实现使用伪随机数引擎实现std :: random_device.

有没有办法检查当前实现是否使用PRNG而不是RNG(然后说出错并退出),如果没有,为什么不呢?

请注意,一点点谷歌搜索显示至少MinGW std::random_device以这种方式实现,因此如果std::random_device要使用它是真正的危险.

---编辑---
而且,如果答案是否定的,有人可以给一些见解,为什么没有这样的功能/特征/ 东西,我会很感兴趣.

c++ random c++11

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

C++ 11 lambda捕获实际捕获了多少?

我在多个示例中看到,您可以使用单个字符捕获多个变量,如下所示:

Rect rect;
Point point;

auto someLambda = [&](const SomeType& var)
{
    if (rect.Contains(point))
    {
        var.Something();
    }

    this->MemberFunction();
};
Run Code Online (Sandbox Code Playgroud)

这最终会抓住rectpoint通过引用获得访问权限this,但它实际捕获了多少?它只捕获它需要的变量,还是从字面上捕获当前范围内的所有变量?

我在其他示例中看到,您还可以指定要捕获的各个变量:

Rect rect;
Point point;

auto someLambda = [this, &rect, &point](const SomeType& var)
{
    if (rect.Contains(point))
    {
        var.Something();
    }

    this->MemberFunction();
};
Run Code Online (Sandbox Code Playgroud)

这样或那样做有什么好处吗?我曾与之合作的人曾提到过使用"全部捕获" [&]版本的价格更贵,但我找不到任何文件来支持这一点.我只想确切地知道,所以我不会让代码变得比它需要的更复杂,或者做一些我不应该做的昂贵的事情.

c++ performance lambda c++11

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

C typedef函数原型,结构在定义之前尝试引用.

我需要引用一个尚未定义的结构,因为struct实际上包含了typedef'd函数原型.

例如,

typedef int (MyCallbackFunction)(X * x, void * ctx);

typedef struct CallbackData {
  MyCallbackFunction * callback;
  void * ctx;
} CallbackData;

typedef struct X {
  char a;
  int b;
  int c;
  double d;

  CallbackData e;
} X;
Run Code Online (Sandbox Code Playgroud)

实际编写此代码/标头的有效方法是什么?

c struct

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

List和List <Object>之间的Java差异

ListList<Object>java 之间有什么区别?

java generics

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

MySQL调用另一个过程并将值插入临时表

我有两个程序说proc1和proc2.我在另一个内部调用一个mysql程序.

在proc1中我想将proc2中的值插入到proc1临时表中.proc2返回两列,但我只想在proc1临时表中插入一列.

Proc2的输出如下

Hrs(Timestamp)    Status
09:30             IN,OUT,IN,OUT 
04:30             IN,OUT
07:30             IN,OUT,IN,OUT
04:25             IN,OUT
Run Code Online (Sandbox Code Playgroud)

Proc1代码

CREATE PROCEDURE Proc1()
BEGIN
   DROP TABLE IF EXISTS TempWorkedHrs ;
   CREATE TEMPORARY TABLE TempWorkedHrs(WorkedHrs TIMESTAMP); 

   INSERT INTO TempWorkedHrs(WorkedHrs)
   CALL Proc2(); 

   SELECT SUM(WorkedHrs) INTO @TotalHrs
     FROM TempWorkedHrs;        
END //
Run Code Online (Sandbox Code Playgroud)

当我将值插入proc1中的临时表时,proc2中的第二列对我来说并不重要.

Q1.如何将从过程返回的特定列插入临时表?在我的情况下proc2的第一列.

mysql mysqli stored-procedures

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

使用带有C++ 11属性语法的gcc属性

我试图使用GCC属性C++ 11语法.例如这样的事情:

static void [[used]] foo(void)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但我得到以下内容:

warning: ‘used’ attribute ignored [-Wattributes]
static void [[used]] foo(void)
            ^
Run Code Online (Sandbox Code Playgroud)

为什么忽略该属性?是否可以将GCC属性用作C++属性?

c++ attributes gcc c++11

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