我真的想成为一个更好的程序员,并制作更多模块化,有组织的代码.
作为练习,我试图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 …
我有一个git项目,我用于最近发表的科学论文.在项目中,我有子目录doc(拆分为doc/paper doc/talks)results src等等.
现在我想发布我的源代码(但不是我的演示幻灯片等).让人们只访问src子目录的最佳方法是什么?我会发布一个zip文件来拍摄当前src目录的快照,但我希望人们能够轻松获得更新.
非常感谢.奥利弗
我发现了几个问题,询问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) 这个问题的一些对话变得丑陋,并且要求我提出一个新问题,但是因为有一个答案,尽管有相似之处,我仍然无法删除它(非常蹩脚,Stackoverflow).
请看这个问题:
有人帮我找到了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?如果你这样做,我真的很感激.
非常感谢.
我正在尝试(作为练习)在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 :: …
在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?
我有一个函数返回一个指向对象的共享指针(由于许多大的依赖项,很难包含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创建为右值,并在*运算符运行后立即释放其内存?
有没有办法强制派生类型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没有初始化。
我怎样才能做到这一点?
我正在使用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值复制数据).但是,有一种内置机制可以使用控件中的值重绘图表(例如滑块,此处为示例).
有没有人知道是否有办法绑定两个图表,以便鼠标悬停事件可用于重绘一个图表与新参数?
c++ ×5
c++11 ×2
javascript ×2
stl ×2
templates ×2
bash ×1
c# ×1
const ×1
git ×1
inheritance ×1
iterator ×1
jquery ×1
oop ×1
readonly ×1
set ×1
shared-ptr ×1
subdirectory ×1
typedef ×1
valgrind ×1