Возникла необходимость получить копию первого столбца в двумерном массиве. Я все делаю через указатели, и одномерный и двумерный. Как можно получить значения из двумерного без указания на память. Вот например есть функция:
#include <iostream>
#include<iomanip>
using namespace std;
int** createMatrix(int m, int n);
int** fillMatrix(int** arr, int m, int n);
int* fillm(int m);
void showMatrix(int** arr, int m, int n);
void seekToUpdate(int** arr, int* ad, int m, int n);
bool checkValidMatrix(int **arr,int *ad,int m,int n);
int* copyMatrix(int* sourseMatrix, int rowsCount);
void showArr(int* arr, int m)
{
for (int i = 0; i < m; i++)
cout << arr[i] << ends;
}
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(0));
int m, n;//строки и столбцы основной матрицы
cout << "Input count columns: ";
cin >> m;
cout << "Input count rows: ";
cin >> n;
auto arr = createMatrix(m, n);//авто определение типов
arr = fillMatrix(arr, m, n);
showMatrix(arr, m, n);
auto arr_trix = copyMatrix(*arr, m);
showArr((*arr), m);
seekToUpdate(arr, arr_trix, m, n);
}
int* copyMatrix(int* sourseMatrix, int rowsCount)
{
int incr = 0;
int* i = &incr;
int* destMatrix = new int [rowsCount];
//memcpy(destMatrix, sourseMatrix, sizeof(int) * rowsCount);
for (; (*i) < rowsCount; i++)
destMatrix[(*i)] = (*sourseMatrix)[i];
return destMatrix;
}
int** createMatrix(int m, int n)
{
int** arr = new int* [m];
for (int i = 0; i < m; i++)
{
arr[i] = new int[n];
}
return arr;
}
int** fillMatrix(int** arr, int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
arr[i][j] = 0 + rand() % 15;
}
}
return arr;
}
int* fillm(int m)
{
int* a = new int[m];
for (int i = 0; i < m; i++)
{
a[i] = 0 + rand() % 15;
}
return a;
}
void showMatrix(int** arr, int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << setw(3) << arr[i][j] << ends;
}
cout << endl;
}
cout << endl;
//for (int i = 0; i < m; i++)
//{
// for (int j = 0; j < n; j++)
// {
// cout << setw(3) << arr[j][i] << ends;
// }
// cout << endl;
//}
}
bool checkValidMatrix(int** arr_first, int* arr_second, int m, int n)
{
bool isValid = false;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (arr_first[j][i] == arr_second[j])
{
isValid = true;
}
else
{
isValid = false;
break;
}
}
cout << endl;
if (isValid == false)
break;
if (isValid == true)
{
cout << endl;
}
}
return isValid;
}
void seekToUpdate(int **arr,int *ad,int m,int n)
{
cout << endl;
int counter = 0;
while (checkValidMatrix(arr, ad, m, n) != true)
{
if(counter>0)
arr = fillMatrix(arr, m, n);
cout << "Попытка генерации номер:" << ends << counter++ << endl;
cout << endl;
showMatrix(arr, m, n);
cout << endl;
showArr((*arr), m);
}
cout << "Матрица сгенерирована с попытки номер:" << ends << counter<<endl;
showMatrix(arr, m, n);
}
В данном коде функция int* copyMatrix(int* sourseMatrix, int rowsCount);
должна копировать массив. Но т.к. она указывает на область памяти двумерного массива, она будет меняться вместе с ним. В конце есть функция seekToUpdate(), она пытается создать матрицу которая удовлетворяет условию, что у нее все столбцы имеют значения в определенном порядке. И пока не получится такая матрица, цикл бесконечно перезаполняет матрицу. И тут опять же вместе с изменением двумерного массива, меняется и одномерный массив
Пробовал как вариант, через цикл просто присваивать каждому элементу одного массива, каждый элемент другого массива. Но результат один и тот же.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задача: Процентная ставка по вкладу составляет P процентов годовых, которые прибавляются к сумме вклада в конце годаВклад составляет X рублей...
структура и данные таблицы тут https://pastebincom/u1GY7gvr
Допустим на сайте будут автомобили, некоторые из которых будут электромобилиТ