vector的vector(向量的向量)如何初始化?

哈利_蜘蛛侠 2013-10-20 06:36:36
比如我建立了一个class叫做card,然后定义下面的一个vector的vector,

vector<vector<card> > AIcards;
想给它初始化了,因为维数是已经确定了的,于是我想这么做,
vector<vector<card> > AIcards(4)(13);
可是编译的时候会报错,报错信息是:
missing type specifier - int assumed. Note: C++ does not support default-int
这个是什么情况?是我的用法有问题吗?如果是的,应该怎么做呢?
...全文
1250 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-10-21
  • 打赏
  • 举报
回复
仅供参考
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
    p=(int **)malloc(4*sizeof(int *));
    if (NULL==p) return;
    for (i=0;i<4;i++) {
        p[i]=(int *)malloc(5*sizeof(int));
        if (NULL==p[i]) return;
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            p[i][j]=i*5+j;
        }
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            printf(" %2d",p[i][j]);
        }
        printf("\n");
    }
    for (i=0;i<4;i++) {
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
fox_liucx 2013-10-21
  • 打赏
  • 举报
回复
引用 11 楼 fox_liucx 的回复:
[quote=引用 9 楼 supermegaboy 的回复:] [quote=引用 8 楼 u011873969 的回复:] [quote=引用 7 楼 supermegaboy 的回复:] 不过,无论如何,嵌套vector其实是不被推荐的,影响性能,可改为 vector< vector< card >* > AIcards; 更好些。
后面的这个与原来的有什么区别呢?[/quote] STL是通过值语义复制的,元素为类会增加许多构造和析构带来的成本,改为指针后,这类成本少多了。[/quote] 那为什么里面一层不用指针呢?vector< vector<card *> > vec;[/quote] vector< vector<card *> *> vec;
fox_liucx 2013-10-21
  • 打赏
  • 举报
回复
引用 9 楼 supermegaboy 的回复:
[quote=引用 8 楼 u011873969 的回复:] [quote=引用 7 楼 supermegaboy 的回复:] 不过,无论如何,嵌套vector其实是不被推荐的,影响性能,可改为 vector< vector< card >* > AIcards; 更好些。
后面的这个与原来的有什么区别呢?[/quote] STL是通过值语义复制的,元素为类会增加许多构造和析构带来的成本,改为指针后,这类成本少多了。[/quote] 那为什么里面一层不用指针呢?vector< vector<card *> > vec;
飞天御剑流 2013-10-20
  • 打赏
  • 举报
回复
引用 8 楼 u011873969 的回复:
[quote=引用 7 楼 supermegaboy 的回复:] 不过,无论如何,嵌套vector其实是不被推荐的,影响性能,可改为 vector< vector< card >* > AIcards; 更好些。
后面的这个与原来的有什么区别呢?[/quote] STL是通过值语义复制的,元素为类会增加许多构造和析构带来的成本,改为指针后,这类成本少多了。
哈利_蜘蛛侠 2013-10-20
  • 打赏
  • 举报
回复
引用 7 楼 supermegaboy 的回复:
不过,无论如何,嵌套vector其实是不被推荐的,影响性能,可改为 vector< vector< card >* > AIcards; 更好些。
后面的这个与原来的有什么区别呢?
飞天御剑流 2013-10-20
  • 打赏
  • 举报
回复
引用 6 楼 u011873969 的回复:
[quote=引用 3 楼 supermegaboy 的回复:] vector< vector< card > > AIcards( 4, vector< card >( 13 ) );
谢谢,真的可以哦!不过我还有一个问题,就是定义了一个 vector< vector< card > > AIcards 后,怎么知道它的两个维数呢?[/quote] AIcards.size()就是第一维长度;AIcards[i].size()就是各元素的长度。 如果你的编译器支持C++11,也可以使用象5楼那样的列表初始化。 不过,无论如何,嵌套vector其实是不被推荐的,影响性能,可改为 vector< vector< card >* > AIcards; 更好些。
哈利_蜘蛛侠 2013-10-20
  • 打赏
  • 举报
回复
引用 3 楼 supermegaboy 的回复:
vector< vector< card > > AIcards( 4, vector< card >( 13 ) );
谢谢,真的可以哦!不过我还有一个问题,就是定义了一个 vector< vector< card > > AIcards 后,怎么知道它的两个维数呢?
DeDeWo 2013-10-20
  • 打赏
  • 举报
回复
#include<iostream>
#include<vector> 
using namespace std;

int main()
{
	vector< vector<int> > vvec = { {1,2}, {2,3,4}, {5,6,7,8} };
	
	for ( auto x : vvec )
	{
		for ( auto y : x )
		{
			cout << y << " ";
		}
		cout << endl;
	}
	
	return 0;
}
allanfreax 2013-10-20
  • 打赏
  • 举报
回复
应该是三楼的对
飞天御剑流 2013-10-20
  • 打赏
  • 举报
回复
引用 楼主 u011873969 的回复:
比如我建立了一个class叫做card,然后定义下面的一个vector的vector, vector<vector<card> > AIcards; 想给它初始化了,因为维数是已经确定了的,于是我想这么做, vector<vector<card> > AIcards(4)(13); 可是编译的时候会报错,报错信息是: missing type specifier - int assumed. Note: C++ does not support default-int 这个是什么情况?是我的用法有问题吗?如果是的,应该怎么做呢?
vector< vector< card > > AIcards( 4, vector< card >( 13 ) );
哈利_蜘蛛侠 2013-10-20
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
维数确定的话用std::array
只是初始化的时候维数知道了而已,以后还会变的
  • 打赏
  • 举报
回复
维数确定的话用std::array

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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