void AnimaMappedValues::SetMatrixArray(const AnimaString& propertyName, AnimaArray<AnimaMatrix>* value) { AnimaString pName = _uniqueName + propertyName; auto foundValue = _matricesArraysMap.find(pName); if (foundValue == _matricesArraysMap.end()) AddMatrixArray(propertyName, value); else { AnimaArray<AnimaMatrix>* currentArray = foundValue->second; AInt valueSize = value->size(); AInt currentSize = currentArray->size(); // ciclo sui primi elementi dell'array che ho già in memoria per sostituire i valori AInt offset = 0; for (; offset < valueSize && offset < currentSize; offset++) (*currentArray)[offset] = value->at(offset); // se non sono riuscito a copiare tutti i valori del nuovo array vuol dire che quello che avevo in memoria aveva // una dimensione inferiore quindi devo aggiungere i nuovi valori for (; offset < valueSize; offset++) currentArray->push_back(value->at(offset)); // se il valore di offset è minore della lunghezza che aveva l'array che avevo già in memoria significa // che il nuovo array ha una dimensione inferiore, quindi rimuovo gli elementi di troppo if (offset < currentSize - 1) { for (AInt i = currentSize - 1; i > offset; i--) currentArray->erase(currentArray->begin() + i); } ANIMA_ASSERT(currentArray->size() == value->size()); } }
int main() { int row, column; ElemType **matrixa, **matrixb, **matrixadd, **matrixtran; //矩阵 TSMatrix arraya, arrayb, arrayadd, arraytran; //三元组 while (scanf("%d%d", &row, &column) != EOF && row*column) { CreateMatrix(&matrixa, row, column); //随机生成矩阵A printf("正在生成稀疏矩阵......\nDone!\nA矩阵:\n"); PrintMatrix(matrixa, row, column); //输出矩阵 printf("A矩阵的三元组:\n"); //输出A的三元组 MatrixToArray(matrixa, &arraya, row, column); //矩阵A转换为三元组 freeMatrix(&matrixa, row); PrintArray(arraya); printf("A矩阵的转置矩阵(快速转置得到):\n"); transpose(arraya, &arraytran); ArrayToMatrix(arraytran, &matrixtran); freeArray(&arraytran); PrintMatrix(matrixtran, column, row); freeMatrix(&matrixtran, column); CreateMatrix(&matrixb, row, column); //随机生成矩阵B printf("正在生成稀疏矩阵......\nDone!\nB矩阵:\n"); PrintMatrix(matrixb, row, column); printf("B矩阵的三元组:\n"); MatrixToArray(matrixb, &arrayb, row, column); freeMatrix(&matrixb, row); PrintArray(arrayb); printf("C矩阵(C=A+B):\n"); AddMatrixArray(arraya, arrayb, &arrayadd); freeArray(&arraya); freeArray(&arrayb); ArrayToMatrix(arrayadd, &matrixadd); freeArray(&arrayadd); PrintMatrix(matrixadd, row, column); freeMatrix(&matrixadd, row); } return 0; }