c ++将矩阵转换为行指针向量

时间:2010-10-10 02:14:50

标签: c++ pointers matrix vector

vector<vector<int> > mymatrix;
vector<int> *ptr_vec;

如何使ptr_vec指向mymatrix内部的向量。更多细节让我们说mymatrix.at(0).size()给出10,mymatrix.at(1).size()给出14 ..如果我去ptr_vec->at(15)它应该给我mymatrix.at(1)中的第五个成员希望它不会混淆任何人。

好了,现在我明白了这一点,把mymatrix想象成这样的分离向量 vector<int> row1, row2, row3;这可能更简单,如何让ptr拥有其他所有载体的所有地址?

3 个答案:

答案 0 :(得分:1)

您必须手动迭代矩阵才能构建向量:

vector<int> *ptr_vec = new vector<int>;
for (int j=0;j<mymatrix.size();j++) {
  for (int k=0;k<mymatrix[j].size();k++) {
    vec->push_back(mymatrix.at(j).at(k));
  }
}

我认为你想要的是不可能的,因为你的矩阵不是作为一个连续的整数块存在,它是一个向量块,每个向量指向每一行的另一个存储位置。

答案 1 :(得分:1)

鉴于您的澄清“如何使该ptr具有其他任何向量的所有地址”,我认为您在声明中错误地放置了*

它认为你的意思是ptr_vec是一个指针向量。

如果是这样,......

#include <iostream>
#include <vector>
#include <stddef.h>
using namespace std;

typedef ptrdiff_t Size;

template< class Elem >
Size countOf( vector< Elem > const& v ) { return v.size(); }

int main()
{
    vector< vector<int> >   mymatrix( 10, vector<int>( 14 ) );
    vector<int*>            ptr_vec;

    for( Size i = 0;  i < countOf( mymatrix );  ++i )
    {
        vector<int>&    v   = mymatrix[i];

        for( Size j = 0;  j < countOf( v );  ++j )
        {
            ptr_vec.push_back( &v[j] );
        }
    }

    // Init data
    for( Size i = 0;  i < countOf( mymatrix );  ++i )
    {
        vector<int>&    v   = mymatrix[i];

        for( Size j = 0;  j < countOf( v );  ++j )
        {
            v[j] = 100*i + j + 1;
        }
    }

    // Display
    for( Size i = 0;  i < countOf( ptr_vec );  ++i )
    {
        cout << *ptr_vec[i] << ' ';
    }
    cout << endl;
}

干杯&amp;第h。,

- Alf

答案 2 :(得分:0)

您可以使用std::vector<T>::pointer

vector<vector<int> > mymatrix;
vector<vector<int> >::pointer ptr = &mymatrix[0];

你现在可以像任何指针一样尊重ptr,使用指针算术等。

有关详细信息,请参阅例如MSDN