高分赠送:vector动态二维数组传递到函数问题

gaosonglove 2009-07-10 07:07:40
我用了vector动态二维数组在DrawLine()函数中进行初始化,赋值.
int m_t=2;
vector <vector <CString> > m_stationitem(varal,vector <CString>(m_t));
可以看出m_stationitem动态二维数组中一维是未知的,varal有可能是3,也有可能是5,而二维是固定的,为2.
现在需要把m_stationitem动态二维数组传递给query()函数,需要该怎么做呢?
如果一维维数是固定的,我知道怎么传,可以利用引用传递.可是是一维维数是未知的,该怎么向query()函数传?没有头绪.
请教高手.谢谢
...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzhipeng 2009-07-11
  • 打赏
  • 举报
回复
up
xwsn007 2009-07-11
  • 打赏
  • 举报
回复

typedef vector < vector <CString> > PointVec; //vector <CString>是存放一个点的坐标么,为啥不用vector <int>呢?
typedef vector < vector <CString> >::const_iterator PointVecIter;

const int m_t=2;
PointVec m_stationitem(varal,vector <CString>(m_t));

//定义处
BOOL query(const PointVec &points, int nPointMaxNum)
{
int nNum = points.size();
ASSERT(nNum <= nPointMaxNum);

PointVecIter p = points.begin();
for(; p != points.end(); ++p)
{
...
}
}

//调用处
query(m_stationitem, varal);
xwsn007 2009-07-11
  • 打赏
  • 举报
回复
实验:好久没上csdn发帖子了,不会插入源代码,再试试


typedef vector < vector <CString> > PointVec; //vector <CString>是存放一个点的坐标么,为啥不用vector <int>呢?
typedef vector < vector <CString> >::const_iterator PointVecIter;

const int m_t=2;
PointVec m_stationitem(varal,vector <CString>(m_t));

//定义处
BOOL query(const PointVec &points, int nPointMaxNum)
{
int nNum = points.size();
ASSERT(nNum <= nPointMaxNum);

PointVecIter p = points.begin();
for(; p != points.end(); ++p)
{
...
}
}

//调用处
query(m_stationitem, varal);
xwsn007 2009-07-11
  • 打赏
  • 举报
回复
有点疑惑,定义m_stationitem时指定的varal只是构造vector对象时数组的初始长度啊,只要你愿意push_back,
m_stationitem的最终长度可以超过varal的。vector与c++内置数组类型的一大区别在于vector实现的数组是可变长度的,而像int array[10]这样内置数组,一旦定义,其长度不可变。楼主是不是想以内置数组的定义习惯来使用vector啊?
这样的话,将varal传给query(),而m_stationitem的实际长度由vector::size()获得,并加以断言,保证size不大于varal。



typedef vector< vector<CString> > PointVec; //vector<CString>是存放一个点的坐标么,为啥不用vector<int>呢?
typedef vector< vector<CString> >::const_iterator PointVecIter;

const int m_t=2;
PointVec m_stationitem(varal,vector <CString>(m_t));

//定义处
BOOL query(const PointVec &points, int nPointMaxNum)
{
int nNum = points.size();
ASSERT(nNum <= nPointMaxNum);

PointVecIter p = points.begin();
for(; p != points.end(); ++p)
{
...
}
}

//调用处
query(m_stationitem, varal);
xwsn007 2009-07-11
  • 打赏
  • 举报
回复
//CSDN有些地方做的烂不说,本人也太愚,也不看看帖子编辑器自动插入的是啥。
//这里绝无恶意灌水,还望楼主见谅,呵呵
xwsn007 2009-07-11
  • 打赏
  • 举报
回复
//终于明白了,烂烂的csdn
typedef vector < vector <CString> > PointVec; //vector <CString>是存放一个点的坐标么,为啥不用vector <int>呢?
typedef vector < vector <CString> >::const_iterator PointVecIter;

const int m_t=2;
PointVec m_stationitem(varal,vector <CString>(m_t));

//定义处
BOOL query(const PointVec &points, int nPointMaxNum)
{
int nNum = points.size();
ASSERT(nNum <= nPointMaxNum);

PointVecIter p = points.begin();
for(; p != points.end(); ++p)
{
...
}
}

//调用处
query(m_stationitem, varal);
悟迟 2009-07-10
  • 打赏
  • 举报
回复
哈哈,不懂。帮你顶顶。
我都没看懂楼主的数组是啥意思,
不过,我想你用typedef + 分开定义,估计能让我方便的领会楼主的意思。
以下是瞎写的哦。
typedef vector<CString> v1;
typedef vector<v1> v2;
v2 v_2;

void Darw(v2* p_v_2)
{
int nSize = p_v_2->size();
for (int i=0; i<nSize; i++)
{
int nSizeEx = p_v_2->at(i)->size();
for (int j=0; j<nSizeEx; j++)
{
CString sText = p_v_2->at(i)..........
}
}
}
oyljerry 2009-07-10
  • 打赏
  • 举报
回复
传一个二维数组引用,同时加一个参数来表明一维数组个数 int nCount
healer_kx 2009-07-10
  • 打赏
  • 举报
回复
MARK

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧