我希望在一些现有的c ++项目中使用一些c ++ 11特性,所以我开始在一些项目中更改Clang中的编译标志,并且我一直在遇到关于C++ 11处理转换操作符(或者转换)的特定问题运算符)我没想到会看到并且不明白为什么现在这被认为是一个错误,因为它是有效的C++代码而不是c ++ 11
我把它归结为这个简单的例子:
#include <iostream>
#include <vector>
class SerializableFormat
{
public:
size_t i;
};
class A
{
public:
size_t x, y;
A(size_t n) : x(n), y(1) { }
operator const SerializableFormat() const
{
SerializableFormat result;
result.i = x;
if (y)
{
result.i /= y;
}
return result;
}
};
int main(int argc, const char * argv[])
{
std::vector<SerializableFormat> v;
for(size_t i = 0; i < 20; i++)
{
v.push_back(A(i));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
-std=c++98 …我正在寻找一些伪代码、算法或指南,以帮助我为广义图数据结构找到合适的迭代后序遍历算法。
\n\n我发现了大量的资源(例如两栈或一栈算法)非常适合树,但对于图来说却很糟糕,因为它们无法处理循环/后边缘、交叉边缘等。
\n\n我已经成功编写了一个递归后序图遍历算法,如下所示:
\n\ntemplate<typename V, typename E>\nvoid tGraph<V, E>::RecursivePostOrderSearch(const tGraph& g, const VertexType& u, std::set<VertexType>& visited, std::vector<VertexType>& result)\n{\n if (visited.find(u) == visited.end())\n {\n visited.insert(u);\n\n EdgeSet edgesOut = g.outgoingEdgesOf(u);\n\n for(typename EdgeSet::const_iterator iter = edgesOut.begin(); iter != edgesOut.end(); iter++)\n {\n RecursivePostOrderSearch(g, iter->second.second, visited, result);\n }\n\n result.push_back(u);\n }\n}\n\ntemplate<typename V, typename E> std::vector<V> tGraph<V, E>::postOrderList(const VertexType& v) const\n{\n std::set<V> visited;\n std::vector<V> result;\n\n RecursivePostOrderSearch(*this, v, visited, result);\n\n return result;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n其中V是节点类型,E是边类型——“权重”对和传入/传出节点对。
如果我在下图上运行::postOrderList(带有根节点A):
在 bash 中,我编写了一个函数,该函数使用通配符循环遍历具有多个扩展名的目录中的文件,并仅复制这些特定文件(如果存在)。代码片段如下所示:
set -e
pushd ../../../../$3/code/project/common/ > /dev/null
mkdir -p ../$2
shopt -s nullglob
for file in *.gyp; do cp $file ../$2/; done
for file in *.gypi; do cp $file ../$2/; done
for file in *.sh; do cp $file ../$2/; done
for file in *.patch; do cp $file ../$2/; done
popd > /dev/null
Run Code Online (Sandbox Code Playgroud)
我更愿意编写一条for file in x语句,这样我就不必为我想要复制的每个扩展名复制并粘贴这一行。
如何将这四个for语句重写为一个for语句?如果可能的话,我想将*.ext通配符格式保留在其中。
大约两年前,我开始在本地 x86 Debian VM 内运行 GitLab CE,去年我决定将 GitLab CE 实例迁移到专用的 Intel NUC 服务器。一切似乎都很顺利,没有任何问题,并且我的 GitLab CE 实例截至今天是最新的(运行 13.4.2)。
但我最近发现,一些被移动的存储库给出了“没有存储库!” 访问他们的项目页面时出错,如果他们有任何问题板、合并请求等,这些也都消失了。但您不会怀疑它,因为损坏的存储库与我一直使用的工作存储库一起出现在存储库列表中。
如果我必须对这些损坏的存储库进行推理,那就是它们在一年前进行了最后一次活动,除了初始推送之外,没有对它们进行任何推送,或者是否进行了更改、创建了问题或合并请求创建,它实际上是一年多前。
其中一些损坏的存储库相当大,有很多历史记录,而其他存储库则非常小(实际上只是跟踪 shell 脚本的更改),所以我认为存储库大小本身与此没有任何关系。
如果我运行 GitLab 诊断检查sudo gitlab-rake gitlab:check,除了“散列存储”之外,一切看起来都很好:
All projects are in hashed storage? ... no
Try fixing it:
Please migrate all projects to hashed storage
Run Code Online (Sandbox Code Playgroud)
但随后运行sudo gitlab-rake gitlab:storage:migrate_to_hashed似乎没有完成(仪表板中有六个失败的作业),并且再次运行“gitlab:check”仍然表明存在“散列存储”问题。我也尝试过运行sudo gitlab-rake gitlab:git:fsck,sudo gitlab-rake cache:clear但这些命令似乎没有什么区别。
幸运的是,我的机器上有所有缺少的存储库的最新版本,事实上,我仍然有运行 GitLab CE 12.8.5 的原始虚拟机(存储库的副本稍微过时了。)
所以我的问题是:
migrate_to_hashed任务再次未能完成。)提前致谢。