我有一个2D C风格的数组,我必须将它的一列传递给一个函数。我该怎么做?
基本上我需要MATLAB命令A[:,j]
的C / C ++等价物,它会给我一个列向量。在C / C ++中有可能吗?
答案 0 :(得分:1)
int colsum(int *a, int rows, int col)
{
int i;
int sum = 0;
for (i = 0; i < rows; i++)
{
sum += *(a + i*rows+col);
}
return sum;
}
int _tmain(int argc, _TCHAR* argv[])
{
int rows = 2;
int cols = 2;
int i, j;
int *a;
a = (int*)malloc(rows*cols*sizeof(int));
// This just fills each element of the array with it's column number.
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
*(a+i*rows + j) = j;
}
}
// Returns the sum of all elements in column 1 (second from left)
int q = colsum(a, rows, 1);
printf("%i\n", q);
return 0;
}
它不是完全传递列,它将一个指针传递给数组的开头,然后给它指示数组有多少行以及哪一列关心自己。
答案 1 :(得分:1)
您有3个选项,
1)将指针传递给对象(在将其移动到目标列的第一个元素之后)
twoDArray [0] [专栏]
现在,您可以计算此列的下一个项目(跳过元素)
2)创建一个包装类,为您执行此操作。
custom2DArray->getCol(1);
.
.
.
class YourWrapper{
private:
auto array = new int[10][10];
public:
vector<int> getCol(int col);
}
YourWrapper:: vector<int> getCol(int col){
//iterate your 2d array(like in option 1) and insert values
//in the vector and return
}
3)改为使用1d数组。您可以轻松获得此信息。通过跳过行并访问所需列的值。(仅为了提及而提及,不要反对我)
答案 2 :(得分:0)
考虑你的2D阵列:
std::vector<std::vector<int> > *array = new std::vector<std::vector<int> >;
std::list myCol;
... //fill your array
//Here we iterate through each row with an iterator
for (auto it = array->begin(); it != array->end(); ++it)
//Then we access the value of one col of this row
myCol.push_back(it[col]);
//MyCol will be filled with the col values
for col = 1, myCol=[8, 3, 1, 4]
\/
it->[[2, 8, 4, 3],
\/ [6, 3, 9, 6],
[9, 1, 3, 3],
[2, 4, 2, 7]]