请教,如何初始化一个类中的static const二维vector向量。

来源:互联网 发布:转换图片格式的软件 编辑:程序博客网 时间:2024/06/06 13:25
不多说了,RT:
代码如下:
class CEDMap
{
private:
  static const vector<vector<int> > m_vvecGoalMap;
};

int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};

我希望把二维向量m_vvecGoalMap初始化为跟这个二维数组naGoalMap一样的值,请问
我该如何去实现这个static const二维向量的初始化赋值呢?我在网上看到的都是
用一维数组去初始化一维的向量,我也试了多种方法,包括定义一个static的方法去
初始化m_vvecGoalMap的值,但因为是const的,都不可行,请教一下大家,有什么好的方法
推荐一下吗?非常感谢!

  
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
回复次数:12

 

  • bdmh用户头像
  • bdmh
  • (bdmh)
  • 等 级:
  • 2

    16

    更多勋章
#1楼 得分:10回复于:2011-03-05 15:39:27
类似于这样
C/C++ code
vector<int> v(3,1); static const vector<vector<int> > m_vvecGoalMap(3,v);
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:大专生两年20万代码——就是我的文凭
  • yaoike用户头像
  • yaoike
  • (想念着Run的Ike)
  • 等 级:
#2楼 得分:0回复于:2011-03-05 15:51:00
哦,谢谢,但是,用你的方法的话,只是会得到3个相同的向量呀?
我希望 m_vvecGoalMap 跟 int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};
的值一样,用贵兄的方法似乎实现不了吧。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:多模式匹配问题
  • najiutan用户头像
  • najiutan
  • (najiutan)
  • 等 级:
#3楼 得分:10回复于:2011-03-05 15:51:59
#include <iostream.h>
#include <vector>
using namespace std;
class CEDMap
{
public:
  vector<vector<int> > m_vvecGoalMap;
};
void main()
{
  int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};
CEDMap a;
vector<int>vec1 ,vec2,vec3;
  for(int i=0;i!=3;i++)
vec1.push_back(naGoalMap[0][i]);
for(i=0;i!=3;i++)
vec2.push_back(naGoalMap[1][i]);
for(i=0;i!=3;i++)
vec3.push_back(naGoalMap[2][i]);
a.m_vvecGoalMap.push_back(vec1);
a.m_vvecGoalMap.push_back(vec2);
a.m_vvecGoalMap.push_back(vec3);
for(int j=0;j!=3;j++)
for(i=0;i!=3;i++)
cout<<(a.m_vvecGoalMap[j])[i]<<endl;

}
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:我画的素描,看一眼给5分!
  • yaoike用户头像
  • yaoike
  • (想念着Run的Ike)
  • 等 级:
#4楼 得分:0回复于:2011-03-05 16:01:37
楼上的兄弟,谢谢,但是m_vvecGoalMap是static const的,
请不要把前面那两个关键字给省略了,呵呵!
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:位拷贝与值拷贝
  • Csuxiaowu用户头像
  • Csuxiaowu
  • (西毒----)
  • 等 级:
  • 2

#5楼 得分:10回复于:2011-03-05 16:12:26
C/C++ code
#include <iostream>#include <vector>using namespace std;int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };vector< vector<int> > m_Goal;class Test{ public: Test(){}; static const vector< vector< int > > m_Test; void show(); void set(); private: int i;};const vector< vector< int > > Test::m_Test = m_Goal;void Test::show(){ for( int i = 0; i< m_Goal.size(); ++i ) { for( int j = 0; j< 3; ++j ) { cout<<m_Goal.at(i).at(j)<<" "; } // cout<<m_Goal.at(i).at(j)<<" "; }}void Test::set(){ int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; vector< int > m_One( a[0], a[0] + 3 ); vector< int > m_Two( a[1], a[1] + 3 ); vector< int > m_Three( a[2], a[2] + 3 ); m_Goal.push_back( m_One ); m_Goal.push_back( m_Two ); m_Goal.push_back( m_Three);}int main(){ Test some; some.set(); some.show();}

这样大概是 勉强可以的
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:[活动]C语言大赛
  • najiutan用户头像
  • najiutan
  • (najiutan)
  • 等 级:
#6楼 得分:0回复于:2011-03-05 16:15:03
引用 4 楼 yaoike 的回复:
楼上的兄弟,谢谢,但是m_vvecGoalMap是static const的,
请不要把前面那两个关键字给省略了,呵呵!

刚才没看清楼主的意思
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • thegreatone用户头像
  • thegreatone
  • (thegreatone)
  • 等 级:
#7楼 得分:50回复于:2011-03-05 16:26:21
C/C++ code
#include<iostream>#include<vector>using namespace std;class CEDMap{public: static const vector<vector<int> > m_vvecGoalMap; static const vector<int> e;};int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};vector<int> a1(naGoalMap[0],naGoalMap[0]+3);vector<int> a2(naGoalMap[1],naGoalMap[1]+3);vector<int> a3(naGoalMap[2],naGoalMap[2]+3);vector<int> b[3]={ a1,a2,a3};vector<vector<int> > vecGoalMap(b,b+3);const vector<vector<int> > CEDMap::m_vvecGoalMap=vecGoalMap;int main(){ for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { cout<<CEDMap::m_vvecGoalMap[i][j]<<" "; } cout<<endl; } return 0;}
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • yaoike用户头像
  • yaoike
  • (想念着Run的Ike)
  • 等 级:
#8楼 得分:0回复于:2011-03-05 16:28:47
我在PC上运行试了一下,5楼的兄弟的方法似乎也不行呀?
你在show()方法上打印出来的是m_Goal的值而不是m_Test的值?我试着把m_Test的值打印出来,结果出错了,static的初始化是在赋值之前了。
这样吧,改个方式可能大家更容易关注我的疑问点:
举例来说,C++可以这样定义一个const的二维数组,
const int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};
那要如何定义一个跟naGoalMap的值一样的,而且是const的二维vector呢?
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • thegreatone用户头像
  • thegreatone
  • (thegreatone)
  • 等 级:
#9楼 得分:0回复于:2011-03-05 16:32:51
引用 7 楼 thegreatone 的回复:
C/C++ code
#include<iostream>
#include<vector>

using namespace std;

class CEDMap
{
public:
static const vector<vector<int> > m_vvecGoalMap;
static const vector<int> e;
};
int naGoalM……

 m_vvecGoalMap改为public只是为了能够在main函数中调用 m_vvecGoalMap,从而证实初始化成功,当然,你也可以添加一个静函数来证实。
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • yaoike用户头像
  • yaoike
  • (想念着Run的Ike)
  • 等 级:
#10楼 得分:0回复于:2011-03-05 16:41:03
哦,非常感谢,我还想请教一个问题,为什么我这样子写不行呢?
int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};
const vector<vector<int> > CEDMap::m_vvecGoalMap(naGoalMap[0], naGoalMap[2]);

 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • Csuxiaowu用户头像
  • Csuxiaowu
  • (西毒----)
  • 等 级:
  • 2

#11楼 得分:0回复于:2011-03-05 16:43:12
引用 8 楼 yaoike 的回复:

我在PC上运行试了一下,5楼的兄弟的方法似乎也不行呀?
你在show()方法上打印出来的是m_Goal的值而不是m_Test的值?我试着把m_Test的值打印出来,结果出错了,static的初始化是在赋值之前了。
这样吧,改个方式可能大家更容易关注我的疑问点:
举例来说,C++可以这样定义一个const的二维数组,
const int naGoalMap[3][3] = {1, 2, 3……

oo 不好意思 set 搞错了
那就要 把那段搞出去 
就 7 楼兄弟那样子 
 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • thegreatone用户头像
  • thegreatone
  • (thegreatone)
  • 等 级:
#12楼 得分:20回复于:2011-03-05 16:50:31
引用 10 楼 yaoike 的回复:
哦,非常感谢,我还想请教一个问题,为什么我这样子写不行呢?
int naGoalMap[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 0};
const vector<vector<int> > CEDMap::m_vvecGoalMap(naGoalMap[0], naGoalMap[2]);

因为m_vvecGoalMap存储的数据类型是vector<int>,而naGoalMap为二维数组,它的成员是一维数组,它们两个成员之间不能转换。
但是vector<int>存储的数据类型是int,而naGoalMap[0]的成员也是(int型)数据,所以在初始化vector<int>变量,只要迭代器之间的数据能够转化为int型时就可以了。
你可以再看看容器的初始化。
原创粉丝点击