小编use*_*ser的帖子

用C++编写一个简单的面向对象图

我真的想成为一个更好的程序员,并制作更多模块化,有组织的代码.

作为练习,我试图Graph在C++中创建一个非常简单的类STL.在下面的代码中,我的Node对象不能编译,因为注释行导致对引用的引用STL.

#include <set>

class KeyComparable
{
public:
  int key;
};

bool operator <(const KeyComparable & lhs, const KeyComparable & rhs)
{
  return lhs.key < rhs.key;
}

class Node : public KeyComparable
{
public:
  // the following line prevents compilation
  // std::set<Node &> adjacent;
};
Run Code Online (Sandbox Code Playgroud)

我想将边缘存储在set(by key)中,因为它允许通过键快速移除边缘.如果我要存储list<Node*>,那将工作正常,但它不允许快速删除key.

如果我使用std::set<Node>,通过边缘进行的更改只会更改本地副本(实际上不是相邻的副本Node).如果我使用std::set<Node*>,我不相信<运算符会工作,因为它将操作指针本身,而不是它们索引的内存.

我考虑在另一个类中包装引用或指针,可能是我的KeyComparable类(根据链接页面,这是boost处理它的方式).

或者,我可以存储std::list<Node*>std::map<int, iterator>' of locations …

c++ oop stl data-structures

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

在git中检出子文件夹

我有一个git项目,我用于最近发表的科学论文.在项目中,我有子目录doc(拆分为doc/paper doc/talks)results src等等.

现在我想发布我的源代码(但不是我的演示幻灯片等).让人们只访问src子目录的最佳方法是什么?我会发布一个zip文件来拍摄当前src目录的快照,但我希望人们能够轻松获得更新.

非常感谢.奥利弗

git subdirectory

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

template typedef c ++ 0x

我发现了几个问题,询问C++ 0x中的模板typedef,它们是用using关键字解析的; 但是,使用GCC 4.6.1(运行g++ -std=c++0x),我收到以下错误:

错误:'使用'之前的预期unqualified-id

你能帮我找到我错的地方吗?我一直试图解决这个问题几个小时......

码:

#include <map>

template<typename INDEX, typename VALUE>
class GenericSparseVector
{
protected:
  std::map<INDEX, VALUE> indices_to_values;
};

template <typename VALUE>
using StandardSparseVector = GenericSparseVector<int, VALUE>;
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef c++11

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

在C#中实现只读可缓存集

这个问题的一些对话变得丑陋,并且要求我提出一个新问题,但是因为有一个答案,尽管有相似之处,我仍然无法删除它(非常蹩脚,Stackoverflow).

请看这个问题:

在C#中实现一个可内容哈希的HashSet(比如python的`frozenset`)

c# const set readonly

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

JavaScript删除所有隐藏的元素,但一个

有人帮我找到了JavaScript 代码,用于从提交代码中删除隐藏的表单字段,忽略了我不想删除的某个字段(无论是否隐藏):

$("form").submit(function() {
$(this).find(":hidden").remove(); // hide hidden elements before submitting
});
Run Code Online (Sandbox Code Playgroud)

:not(input[name=csrfmiddlewaretoken])
Run Code Online (Sandbox Code Playgroud)

但是,我不能为我的生活弄清楚如何将这些放在一起.我确定这是一个基本的JavaScript问题,但我似乎无法将它们拼凑在一起.

有谁知道如何删除所有未命名的 隐藏表单条目csrfmiddlewaretoken?如果你这样做,我真的很感激.

非常感谢.

javascript jquery

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

C++ std :: iterator,不在内部使用std :: vector或std :: list

我正在尝试(作为练习)在C++中创建一个简单的数值范围类.它会让你迭代均匀间隔的双精度(如numpy/Python arange):

我想做什么(但使用迭代器):

double lower = ..., upper = ..., delta = ...;
for (double val = lower; val < upper; val += delta)
{
   // do something with val
   f(val);
}
// include the last val to guarantee upper is included or exceeded
f(val); // do something with val
Run Code Online (Sandbox Code Playgroud)

期望的等效迭代器代码:

double lower = ..., upper = ..., delta = ...;
NumericRange nr(lower, upper, delta);
for (NumericRange::const_iterator iter = nr.begin(); iter != nr.end(); iter++)
{
    f(*iter);
}
Run Code Online (Sandbox Code Playgroud)

我希望我的迭代器与STL迭代器兼容,所以我可以重用代码(迭代通过NumericRange应该相当于迭代通过std :: …

c++ iterator stl

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

从shell脚本中的字符串查找变量值

在bash,如果我有:

y=10
x='y'
echo $x # prints 'y'
Run Code Online (Sandbox Code Playgroud)

现在我想$y通过$ x:

echo ${$x} # error: "bad substitution"; I want to print 10
Run Code Online (Sandbox Code Playgroud)

如何使用名称查找变量值$x

bash

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

C++:从*std :: shared_ptr复制时出错

我有一个函数返回一个指向对象的共享指针(由于许多大的依赖项,很难包含MyObject定义):

std::shared_ptr<MyObject> f(std::string params)
{
  return std::shared_ptr<MyObject>(new MyObject(params));
}
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么这段代码有效:

案例1:没有错误 valgrind -v --tool=memcheck

std::shared_ptr<MyObject> obj_ptr = f("hello");
MyObject obj = *obj_ptr;
Run Code Online (Sandbox Code Playgroud)

虽然此代码崩溃:

案例2:崩溃并给出了几个错误 valgrind -v --tool=memcheck

MyObject obj = *f("hello");
Run Code Online (Sandbox Code Playgroud)

MyObject类有一个工作赋值运算符和复制构造函数(在案例1中都经过验证).

我还尝试创建一个std::shared_ptr<MyObject>(via f),将其复制到指针,将指针复制到堆栈上的对象,并删除指针.堆栈上的最终对象仍然很好:

案例3:没有错误 valgrind -v --tool=memcheck

std::shared_ptr<MyObject> obj_ptr = f("hello");
MyObject * obj_ptr2 = new MyObject(*obj_ptr);
MyObject obj3 = *obj_ptr2;
delete obj_ptr2;
obj3.print();
Run Code Online (Sandbox Code Playgroud)

错误可能是因为std::shared_ptr创建为右值,并在*运算符运行后立即释放其内存?

c++ valgrind shared-ptr c++11

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

C++ 派生类型必须定义静态 constexpr

有没有办法强制派生类型static constexpr在 C++ 中定义 a ?我有一个基类,我想强制每个派生类定义一个static const bool has_property.

我尝试使用 CRTP 执行此操作(以便每个派生类都有自己的static const):

template <typename T, class MyClass>
struct Base {
    T data;
    static constexpr bool has_property;
};

template <typename T>
struct Derived : public Base<T, Derived<T> > {
    static constexpr bool has_property = false;
};
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨Base::has_property没有初始化。

我怎样才能做到这一点?

c++ inheritance templates

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

通过鼠标悬停在谷歌图表中更新

我正在使用Google图表以交互方式绘制一些数据.

我想绘制两个图表.第一张图表绘制了f(x)与x的关系曲线.第二个图表绘制g(x,y)与y(对于固定值x).在第一个图表的鼠标悬停时,x值将用于重绘g(x,y)与y.

例如,在第一个图表上的鼠标悬停x = 1时,第二个图表将刷新,绘制g(1,y)对y.

我能够实现这一目标的唯一方法是在javascript中手动绑定mouseover事件,并触发第二个图表的完全重绘(通过删除其数据并使用moused over x值复制数据).但是,有一种内置机制可以使用控件中的值重绘图表(例如滑块,此处为示例).

有没有人知道是否有办法绑定两个图表,以便鼠标悬停事件可用于重绘一个图表与新参数?

javascript google-visualization

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