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

    技术2022-05-19  24

    不多说了,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) 等 级:

    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 (想念着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) 等 级: #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 (想念着Run的Ike) 等 级: #4楼 得分:0回复于:2011-03-05 16:01:37 楼上的兄弟,谢谢,但是m_vvecGoalMap是static const的, 请不要把前面那两个关键字给省略了,呵呵!   对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐: 位拷贝与值拷贝 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) 等 级: #6楼 得分:0回复于:2011-03-05 16:15:03 引用 4 楼 yaoike 的回复: 楼上的兄弟,谢谢,但是m_vvecGoalMap是static const的, 请不要把前面那两个关键字给省略了,呵呵! 刚才没看清楼主的意思   对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 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 (想念着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) 等 级: #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 (想念着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 (西毒----) 等 级:

    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) 等 级: #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型时就可以了。 你可以再看看容器的初始化。

    最新回复(0)