Esempio n. 1
0
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());
	}
}
Esempio n. 2
0
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;
}