小编nov*_* Li的帖子

在C++中包装std :: iterator

我需要包装一个矢量迭代器,但不喜欢从头开始重写它的想法.而且我不能将它子类化,因为矢量迭代器似乎不是跨平台的.至少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++ iterator

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

C++中的表实现

在我们的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)

有什么想法吗?

c++ types data-structures

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

不要在gitlab-ci中的不同体系结构之间共享工件

我有一个项目,它构建在不同的docker环境中,并希望将工件传递到下一个阶段.Gitlab-Ci混合了工件并将它们全部传递到下一步.怎么避免这个?

gitlab管道表示

我想应该有一种方法可以将构件从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)

docker gitlab-ci

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

标签 统计

c++ ×2

data-structures ×1

docker ×1

gitlab-ci ×1

iterator ×1

types ×1