gpt4 book ai didi

C++11 用于在没有样板索引的情况下循环部分填充的数组?

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:34 25 4
gpt4 key购买 nike

我正在寻找一种更简洁的方法来遍历部分填充数组的一部分。我不认为 std::valarray<>/std::slice会起作用,即使我想等到 2017 年左右,我也不清楚 std::dynarray<>两者都适合。

int main() {
// Some C-style API fills n <= vals.size() array slots.
std::array<uint32_t, 1024> vals;
size_t n = get(src, vals.data(), vals.size());

// Looking for something like this, though anything better appreciated.
for (auto &v : slice(vals, n)) {
whatever(v);
}

// Unsatisfactory: i only grabs &v, which is obscured from the loop header.
for (int i = 0; i < n; ++i) {
auto &v = vals[i];
whatever(v);
}
}

// I might make these utility templates if need be ...
template <typename T, unsigned int NStride = 1>
struct Slice {
Slice(T *, size_t end, size_t begin = 0);

template <unsigned int N>
Slice(std::array<T, N> &a, size_t end, size_t begin = 0);

using iterator = T *;
iterator begin();
iterator end();
// const_iterators, bazillion operators, etc. ...
};

template <typename T, unsigned int N, unsigned int NStride = 1>
Slice<T> slice(std::array<T, N> &a, size_t end, size_t begin = 0);

是否有任何 STL、boost 等实现了与我的方法类似或更好的方法?

最佳答案

带有 std::for_each 算法的 lambda 删除了索引,尽管它仍然有一些样板:

#include <algorithm>
#include <array>
#include <iostream>

int main() {
std::array<int, 5> a = { 1, 2, 3, 4, 5 };
std::for_each(a.begin(), a.begin() + 3, [](int &n){
std::cout << n << '\n';
});
return 0;
}

输出:

1
2
3

http://ideone.com/toaiUG

std::array 有一个随机访问迭代器,因此您可以将您的 n 添加到它作为范围的末尾。

关于C++11 用于在没有样板索引的情况下循环部分填充的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23354356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com