如何在 C++ 中的某些列表 [x][y] 处添加一个值?

How to add a value at some list[x][y] in C++?

我正在尝试以成本 [x][y] 添加一些值,并且列表必须是指针类型。 我这样声明列表:

list<int>* cost = new list<int>[V]; // V being user input

在这里,我试图在成本[x][y] 的位置添加值“c”。我应该如何添加它。当我尝试使用迭代器时,它说

  1. “调试断言失败”

  2. “无法增加终点迭代器”

代码:

    void addCost(int x, int y, int c) // adds cost in cost[x][y] and cost[y][x] indicies
    {
        auto it = cost[x].begin();
        advance(it, y);
        *it = c;
    }

问题是列表最初是空的。所以,有 0 个元素。

所以,你可以写cost[x]并且可以获得一个迭代器。那没问题。但是,如前所述,列表是空的。因此,如果您尝试推进迭代器,它将失败。

因为it一开始就等于end()。而且这个不能提前。

否则,它会起作用。 . .

一些演示示例:

#include <iostream>
#include <list>

constexpr size_t SIZE = 10;

int main() {
    size_t numberOfElementsX{ SIZE };
    size_t numberOfElementsY{ SIZE };
    
    std::list<int>* cost = new std::list<int>[numberOfElementsX];

    for (size_t i = 0; i < numberOfElementsX; ++i)
        cost[i].resize(numberOfElementsY);

    auto it = cost[3].begin();
    std::advance(it, 5);

    *it = 42;

    for (auto i : cost[3])
        std::cout << i << ' ';
}