我认为问题在于指针 ptr 和新数组 ptr2 的指针的比较。但我一点也不确定。
首先,我让用户输入一个 2D 数组,然后我通过其指针将数组转换为 Transpose,并且由于 C++ 中的数组实际上是行主要顺序的 1D 数组,所以我尝试只比较指针的值两个数组都指向。 不知怎的,我不知道为什么,但它不起作用。 我知道这可能不是最有效的方法,但我想学习并知道为什么它不起作用。 谢谢你
#include <iostream>
using namespace std;
bool transponierte ( int* ptr, int groesse, int c, int r ){
bool symmetrisch;
int array_neu[r][c];
for( int i = 0 ; i < c ; i ++){
for ( int j = 0 ; j < r ; j++){
array_neu[j][i] = *ptr;
ptr++;
}
}
int* ptr2 = &array_neu[0][0];
for ( int i = 0 ; i < groesse ; i++){
if ( *ptr == *ptr2 ){
symmetrisch = true;
}
if ( *ptr != *ptr2){
symmetrisch = false;
break;
}
ptr++;
ptr2++;
}
return symmetrisch;
}
int main(){
int r,c;
cout << "how many columns " << endl;
cin >> c;
cout << "how many rows " << endl;
cin >> r;
int array [c][r];
int groesse = r*c;
for (int i = 0 ; i < r; i++){
for ( int j = 0 ; j < c ; j++){
cout << "type in elemts for the array" << endl;
cin >> array[j][i];
}
}
bool trans = transponierte( (int*)array, groesse, c ,r);
if ( trans == true){
cout << "the matrix is not symmetric " << endl;
}
if( trans == false ){
cout << "the matrix is not symmetric" << endl;
}
return 0;
}
我期望这样的代码使用 std::vectorstd::vector
int array [c][r];
你的代码不是标准的C++
#include <cassert>
#include <vector>
#include <stdexcept>
class matrix_t
{
public:
matrix_t(const std::vector<std::vector<int>>&& values) :
m_values{values}
{
if ((m_values.size() == 0ul) || (m_values[0].size() == 0ul))
{
throw std::invalid_argument{"invalid matrix size"};
}
}
bool is_symmetric()
{
auto size = m_values.size();
// width and height match
if ( size == m_values[0].size())
{
// we only have to check values
// - not on diagonal (they always match)
// - in top-right of matrix (otherwise we will check values twice)
for(std::size_t row = 0; row < size; ++row)
{
for(std::size_t col = row + 1; col < size; ++col)
{
auto& value1 = m_values[col][row];
auto& value2 = m_values[row][col];
if ( value1 != value2 )
{
return false;
}
}
}
return true;
}
return false;
}
private:
std::vector<std::vector<int>> m_values;
};
int main()
{
matrix_t m1{{{1,0},{0,1}}};
assert(m1.is_symmetric());
matrix_t m2{{{1,0,2},{0,1,0},{2,0,1}}};
assert(m2.is_symmetric());
matrix_t m3{{{1,2,3},{0,1,0},{2,0,1}}};
assert(!m3.is_symmetric());
}