我需要包装一个矢量迭代器,但不喜欢从头开始重写它的想法.而且我不能将它子类化,因为矢量迭代器似乎不是跨平台的.至少gnu和ibm看起来不同.
我想做的是以下内容:
class MyContainer {
vector<double> data;
vector<int> indices;
iterator
begin()
{ return my_iterator(data, indices.begin()); }
iterator
end()
{ return my_iterator(data, indices.end()); }
}
MyContainer cont;
Run Code Online (Sandbox Code Playgroud)
其中索引向量包含数据向量内的整数位置.数据应该比指数大得多.
所以我需要一个迭代器,它可以在任何方向上遍历索引,就像普通的向量迭代器那样唯一的例外:当要访问该值时,它必须返回数据向量的值.例如:
for(MyContainer::iterator it = cont.begin(); it != cont.end(); it++) {
cout << *it << endl; // values of data should appear here
}
Run Code Online (Sandbox Code Playgroud)
基本上它应该看起来像std世界的正常集合.你可以在任何你想要的方向迭代它,你可以对它进行排序,运行唯一,find_if等...
任何简单的方案?
在我们的C++项目中,我需要一些组合数据结构,我认为它应该与SQL表非常相似.我有一组具有不同数据类型的相同大小的数组(std :: vectors).例如:
time(int), X(double), Y(double), valid(boolean), number_of_measurements(int)
Run Code Online (Sandbox Code Playgroud)
让我们假装它们就像一张桌子,我需要逐行访问它们.例如,我需要一个功能,将一行插入表的任意位置,这将导致一个元素上的所有行向下移动,杀死行.我可能需要按时间对表进行排序,将其与相同类型的其他表合并.
在C++世界中有这样的东西吗?
基本上我需要一个通用的解决方案,它支持任意数量的列和行.当然,性能是有道理的,所以我更喜欢在内存中而不是在数据库中.
UPDATE
我看到很多人提议定义一个简单的行结构并将其存储在一个集合中.如果我需要经常使用列,请不要这样做.例如,我可能需要乘以整列或计算其中的平均值.我甚至可以插入它或在某个列上应用许多不同的算法.
当我将一个列提取到一个向量,在其上应用一些算法然后将它放回到一个结构时,我想避免这种情况.它看起来很难看,不是吗?
我需要或多或少类似于此:
// Initializing: (three columns: time, X, Y)
table t("time", std::vector<int>(), "X", std::vector<double>(), "Y", std::vector<double>());
// inserting a row
t.insert_row( 1, 20.0f, 20.0f );
// accessing values:
t["time"][10] = 20;
// getting a column:
std::vector<int> time = t["time"];
// sorting
t.sort_by( "time" );
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我有一个项目,它构建在不同的docker环境中,并希望将工件传递到下一个阶段.Gitlab-Ci混合了工件并将它们全部传递到下一步.怎么避免这个?
我想应该有一种方法可以将构件从build_mt31传递给acceptance_mt31,并且对于mt32路径也是如此.Gitlab将它们全部传递给所有兄弟姐妹:
Downloading artifacts for build_mt31 (6965)...
Downloading artifacts from coordinator... ok id=6965 responseStatus=200 OK token=26sk7GBS
Downloading artifacts for build_mt32 (6966)...
Downloading artifacts from coordinator... ok id=6966 responseStatus=200 OK token=7EDnce-d
Run Code Online (Sandbox Code Playgroud)
这是我的.gitlab-ci.yaml文件:
stages:
- build
- acceptance
build_mt31:
stage: build
tags:
- mt3.1
- docker
artifacts:
untracked: true
paths:
- bld31/
script:
- rm -rf bld31
- mkdir -p bld31
- cd bld31
- touch build_mt31
acceptance_mt31:
stage: acceptance
tags:
- mt3.1
- docker
script:
- cd bld31
- ls -all …Run Code Online (Sandbox Code Playgroud)