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)
中的第五个成员希望它不会混淆任何人。
vector<int> row1, row2, row3;
这可能更简单,如何让ptr拥有其他所有载体的所有地址?
答案 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