gpt4 book ai didi

c++ - 如何使用1d索引迭代2d vector

转载 作者:行者123 更新时间:2023-12-02 10:28:25 25 4
gpt4 key购买 nike

给定一个 vector (例如int),下面的代码允许我将平面位置映射到2d索引并访问该元素:

int x = 0, y = 0, acc = 0;

while ((acc = myVector[x].size()+acc) <= position) {
x++;
y= acc;
}
y = position - y;
我想知道是否有一种方法可以使用单个指针对2d vector 的所有元素进行迭代,从而将其递增位置编号。
编辑1:
std::vector<std::vector<int>> myVector;

myVector.emplace_back();

for (int i = 0; i < 10; i++) {
myVector[0].emplace_back(0);
}

myVector.emplace_back();
for (int i = 0; i < 5; i++) {
myVector[0].emplace_back(1);
}

myVector.emplace_back();
for (int i = 0; i < 8; i++) {
myVector[0].emplace_back(2);
}

for (auto row : myVector) {
for (auto col : row) {
std::cout << col << std::endl;
}
}
我需要创建一个指向 myVector[0][0]指向的第一个元素的指针,然后在第一行的末尾与下一行的开始之间创建一个链接,以便可以使用单个指针对其进行迭代。
如果我需要在位置12处放置元素,则只需增加指针就可以将元素放置在位置(1,1)。
基本上我正在尝试使用std::vectors模拟c数组的行为

最佳答案

在c++ 20中,使用<ranges> header 直接支持此功能。因此,您可以简单地执行以下操作:

namespace srv = std::ranges::views;

for (auto i : myVector | srv::join)
std::cout << i << std::endl;
这是 demo
使用range-v3,您可以像这样为连接的 View 创建 vector:
namespace rv = ranges::views;

auto j = myVector | rv::join | ranges::to<std::vector<int>>;
然后将其索引到任意位置。
这是 demo

关于c++ - 如何使用1d索引迭代2d vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63301965/

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