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

不多说了,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的,都不可行,请教一下大家,有什么好的方法
推荐一下吗?非常感谢!

 
 
回复次数: 12

 

#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);
 
  • 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};
的值一样,用贵兄的方法似乎实现不了吧。
 
#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;

}
 
  • yaoike用户头像
  • yaoike
  • (想念着Run的Ike)
  • 等 级:
#4楼 得分:0回复于:2011-03-05 16:01:37
楼上的兄弟,谢谢,但是m_vvecGoalMap是static const的,
请不要把前面那两个关键字给省略了,呵呵!
 
#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(); }

这样大概是 勉强可以的
 
#6楼 得分:0回复于:2011-03-05 16:15:03
引用 4 楼 yaoike 的回复:
楼上的兄弟,谢谢,但是m_vvecGoalMap是static const的,
请不要把前面那两个关键字给省略了,呵呵!

刚才没看清楼主的意思
 
#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 ; }
 
  • 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呢?
 
#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,从而证实初始化成功,当然,你也可以添加一个静函数来证实。
 
  • 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]);

 
#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 楼兄弟那样子 
 
#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型时就可以了。
你可以再看看容器的初始化。
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页