小编aka*_*ppa的帖子

为什么没有std :: shared_ptr <T []>专门化?

该标准提供了一个模板特化std::unique_ptr,正确调用delete[]其析构函数:

void func()
{
   std::unique_ptr< int[] > arr(new int[10]);

   .......
}
Run Code Online (Sandbox Code Playgroud)

由于std::shared_ptr这种专业化不可用,因此有必要提供一个正确调用的删除器delete[]:

void func()
{
    // Usage
    shared_ptr array (new double [256], [](double* arr) { delete [] arr; } ); 

    ..............
}
Run Code Online (Sandbox Code Playgroud)

这只是一个疏忽吗?(以同样的方式存在std::copy_if)或是否有原因?

c++ shared-ptr c++11

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

Java中的迭代笛卡尔积

我想用Java 计算任意数量的非空集的笛卡尔积.

我写过那个迭代代码......

public static <T> List<Set<T>> cartesianProduct(List<Set<T>> list) {
    List<Iterator<T>> iterators = new ArrayList<Iterator<T>>(list.size());
    List<T> elements = new ArrayList<T>(list.size());
    List<Set<T>> toRet = new ArrayList<Set<T>>();
    for (int i = 0; i < list.size(); i++) {
        iterators.add(list.get(i).iterator());
        elements.add(iterators.get(i).next());
    }
    for (int j = 1; j >= 0;) {
        toRet.add(Sets.newHashSet(elements));
        for (j = iterators.size()-1; j >= 0 && !iterators.get(j).hasNext(); j--) {
            iterators.set(j, list.get(j).iterator());
            elements.set(j, iterators.get(j).next());
        }
        elements.set(Math.abs(j), iterators.get(Math.abs(j)).next());
    }
    return toRet;
}
Run Code Online (Sandbox Code Playgroud)

......但我发现它相当不优雅.有人有更好的,仍然是迭代的解决方案吗?使用一些奇妙的功能性方法的解决方案?否则......关于如何改进它的建议?错误?

java algorithm cartesian-product

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

C++禁止可变大小的数组

我正在使用其他人编写的一些现有代码,我无法编译(这里有限的C经验,但我正在努力学习!).

utilities.cc

#include "utilities.h"
FILE *open_file(char *filename, const char*extension, const char *access)
{
  char string[MAX_STR_LEN];
  FILE *strm = NULL;

  if(filename[0]=='\0')
   {
      printf("\n INPUT FILENAME (%s) > ",access);
      fgets(string,MAX_STR_LEN,stdin);
      sscanf(string,"%s",filename);
      printf(" FILE %s opened \n", filename);
   }
   int len=strlen(filename);

   if( len + strlen(extension) >= MAX_STR_LEN)
   {
      printf("\n ERROR: String Length  of %s.%s Exceeds Maximum",
              filename, extension);
      return(NULL);
   } 

   // char *filename1 = new(char[len+strlen(extension)+1]);

   const int filenameLength = len+strlen(extension)+1;
   char *filename1 = new(char[filenameLength]);

   strcpy(filename1,filename); // temp filename for appending extension

   /* check …
Run Code Online (Sandbox Code Playgroud)

c++

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

SSL和SocketChannel

理想情况下,我只需要一个简单的SSLSocketChannel.

我已经有一个组件可以读取和写入普通的消息SocketChannel,但对于其中一些连接,我必须通过线路使用SSL; 但是,这些连接上的操作是相同的.

有没有人知道一个免费的SSLSocketChannel实现(使用适当的选择器)或类似的东西?我发现了这个,但选择器不接受它,因为它的供应商不是SUN.

我正在通过一个简单的对象将read_from/writing_to网络逻辑与网络数据的插入和检索分离,以便使用SSLEngine而不会生气,但考虑到我不知道的事实,实现它是非常棘手的SSL协议的内部......

java ssl nio socketchannel sslengine

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

以编程方式计算缓存故障

我需要在一堆关于内存层次结构效率的假设中评估C++函数所花费的时间(例如:当我们在读取数组的一部分时遇到缓存未命中,缓存命中或页面错误时所花费的时间),所以我我希望有一些库可以让我计算缓存未命中/页面错误,以便能够自动生成性能摘要.

我知道有一些像cachegrind这样的工具可以给出一些关于给定应用程序执行的相关统计信息,但我想要一个库,正如我已经说过的那样.

编辑哦,我忘了:我正在使用Linux,我对可移植性不感兴趣,这是学术性的东西.

欢迎任何建议!

c++ linux memory-management

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

g ++ -std = c ++ 0x出现意外的编译问题

我有一些编译问题在使用g ++ -std = c ++ 0x进行编译时将类型T的元素推回到向量.

这是一个最小的例子:

#include <vector>

using namespace std;

class A {
public:
    A() { }

    A& operator=(A &orig) {
        return *this;
    }
};

int main(int argc, char **argv) {
    A a;
    vector<A> b;
    A c = a; // This is fine
    b.push_back(a); // This is not, but only when compiling with -std=c++0x!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它使用g ++ -Wall -pedantic编译得很好,但是在使用g ++ -Wall -pedantic -std = c ++ 0x进行编译时会出现此错误:

 In file included from /usr/include/c++/4.4/vector:69,
                 from min.cpp:1:
/usr/include/c++/4.4/bits/vector.tcc: …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

C++:为模板参数指定基类

我需要设计一个框架来并行地计算除法和征服算法的结果.为了使用框架,用户需要以某种方式指定实现"划分"阶段(从T到T的函数),"征服"阶段(从D到D的函数)和T和D本身的过程.

我认为定义两个抽象类会很好,BaseDivide并且它会使用正确的类型BaseConquer声明一个纯虚方法compute:这样我就有了一个实现明确定义概念的类型(从框架的角度来看)通过派生抽象类包含用户可定义的函数.

我曾经想过使用模板将类型传递给框架,因此用户不必为了使用框架而实例化它们,所以像这样:

template <typename T, typename D, typename Divide, typename Conquer> 
D compute(T arg);
Run Code Online (Sandbox Code Playgroud)

我的问题是我希望Divide and Conquer是派生类型BaseDivideBaseConquer:有一种方法可以在编译时强制执行它吗?另外:你认为我可以通过更清洁的设计获得类似的结果吗?

c++ templates

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

与约束匹配

为了好玩,我正在创建一个程序,为秘密圣诞老人礼物交换生成合作伙伴。但是,在此设置中,允许约束而不是随机生成对。

示例:A 和 B 彼此讨厌,因此不应指派 A 和 B 为对方购买礼物。

第二个例子:C 人去年为 D 人买了一件礼物。不应指派 C 为 D 购买礼物,但仍应允许 D 为 C 购买礼物。

一般来说,我想从集合到自身生成一个双射函数,但该函数需要对约束敏感。如果有太多的约束使得问题无法解决,则例程应该返回错误或其他内容。

在我看来,这就像某种图形问题,但我真的不知道要从哪个方向解决它。如何以编程方式解决此问题?是否有我可以使用/修改的现有算法?

algorithm constraints graph

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

将派生**转换为基础**并将派生*转换为基础*

好吧,我正在阅读FQA中关于将a转换Derived**为a Base**以及为什么禁止它的问题的这篇条目.我得到的问题是你可以分配给一个Base*不是a 的东西Derived*,所以我们禁止这样做.

到现在为止还挺好.

但是,如果我们深入应用这一原则,为什么我们不禁止这样的例子呢?

void nasty_function(Base *b)
{
  *b = Base(3); // Ouch!
}

int main(int argc, char **argv)
{
  Derived *d = new Derived;
  nasty_function(d); // Ooops, now *d points to a Base. What would happen now?
}
Run Code Online (Sandbox Code Playgroud)

我同意nasty_function做一些愚蠢的事情,所以我们可以说让这种转换很好,因为我们启用了有趣的设计,但我们可以说也是为了双重间接:你有一个Base **,但你不应该给它任何东西尊重,因为你真的不知道它到底在哪里,Base **就像Base *.

所以,问题是:间接的额外级别有什么特别之处?也许重点是,只有一个间接层,我们可以使用虚拟operator=来避免这种情况,而普通指针上没有相同的机制吗?

c++ inheritance pointers

4
推荐指数
2
解决办法
456
查看次数

C++ 11 - 元组和移动语义

这个示例代码应该编译吗? clangg++接受它,同时icc 14拒绝这样做,抱怨auto t = ...std::unique_ptr复制构造函数未定义.

#include <iostream>
#include <memory>
#include <tuple>

std::tuple<std::unique_ptr<int[]>, int> foo()
{
    std::unique_ptr<int[]> a;
    unsigned int b;
    auto t = std::make_tuple(std::move(a), b); 
    return std::move(t);
}

int main()
{
    foo();
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

C++:声明多图迭代器时出错

由于我对C++模板缺乏了解,我遇到了一个愚蠢的问题.

我有一个模板类Token和一个模板类Task.

任务在多图中包含一些令牌*; 我想迭代它们.

所以,在我的一个功能中,我写道:

template <typename C>
void Task<C>::f() {

    // some code...
    multimap<string, Token<C>* >::iterator it;

}
Run Code Online (Sandbox Code Playgroud)

但我从g ++得到这个编译错误:

src/structures.cpp:29: error: expected ‘;’ before ‘it’
Run Code Online (Sandbox Code Playgroud)

如果我把令牌或类似的东西,它编译.

哪里出错?

c++ templates

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

是否可以反编译C++ Builder exe?C++ Builder是安全的吗?

是否可以反编译C++ Builder exe?

C++ Builder是安全的编程工具还是任何人都可以反编译它并查看代码?

c++ c++builder decompiler

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