矩阵存储在std :: vector中

时间:2015-12-06 16:16:35

标签: c++ matrix vector

假设我有一个方阵(例如4x4):

i = 0
result = []

tree = ET.fromstring(webdata)
counts = tree.findall('.//count')

for count in counts:
    result.append(int(counts[i].text))
    i += 1

并假设我将此矩阵存储在C ++ std :: vector v中,没有主对角线上的条目(a_ij,其中i = j):

a_00 a_01 a_02 a_03
a_10 a_11 a_12 a_13
a_20 a_21 a_22 a_23
a_30 a_31 a_32 a_33

如何编写一个C ++函数v = {a_01, a_02, a_03, a_10, a_12, a_13, a_20, a_21, a_23, a_30, a_31, a_32} ,它返回向量v中条目a_ij的索引?

2 个答案:

答案 0 :(得分:0)

包括

using namespace std;

int main()
{
    int i, j, n;
    cin >> n >> i >> j;
    int ans = i * n + j - i;
    if (j > i)
        ans--;
    cout << ans << endl;
    return 0;
}

我这样做。我实际上认为我们有主对角线来解决这个问题。然后答案是i * n + j。很明显,在每一行中,主对角线上只有一个条目,所以我们减去第i行之前的行数,即i。

现在我们必须使用if语句来查看第i行的主对角线上的条目是在第j个元素之前还是之后。真的很简单。

希望它有所帮助!

答案 1 :(得分:0)

对于初学者而言,您只需要乘以(n_cols-1)而不是i * n_cols + j,因为您在每行中缺少一个项目。此外,您还需要调整j(基本上:if (j > i) --j)。如果i == j,则返回错误。