关于C++中Vector的一些问题 5C

各位好,如下代码运行正常,但是一旦我将vector numberVector;
改为vector numberVector[10];后就编译错误,提示为push, empty
等is of non-class type of std::vector [10], 请问这是什么原因?

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> numberVector;
        //numberVector编译运行正常,若改为numberVector[10]则报错。
    numberVector.push_back(1);
    numberVector.push_back(10);
    numberVector.push_back(100);
    numberVector.push_back(1000);

    cout << numberVector.size() << endl;
    cout << numberVector.empty() << endl;
    cout << numberVector.max_size() << endl;
    cout << numberVector.capacity() << endl;

    for (int i=0;i<numberVector.size();i++)
        cout<<numberVector.at(i)<<endl;

    return 0;
 }
c++

4个回答

vector numberVector[10],是个数组,对数组而言,没有push、empty的接口。如果你想初始化为大小为10的向量,使用vector numberVector(10)

spermly
spermly 这是数组,你的应该是结点信息的问题。
一年多之前 回复
u011683608
蒋金多多 回复houdiniZ: 我不太确定作者的意图和原文。首先叶子结点表示,这个树节点没有子节点。如果用vector<int>表示一个树节点,那么这个树节点不包含子节点,也就是向量为空时,他是一个叶子结点。我没看到原文,如果文中真这么做只是偷懒的做法,一般还是要定义结点的结构体。
一年多之前 回复
m0_37990833
houdiniZ 这个问题是我在学DFS算法的时候遇到的,解答中有段代码是vector<int> v[100]; 判别是否是叶节点的代码是if(v[index].size()==0),看上去这句话的意思是判别v[index]这个数组是否无内容,那么为什么这就能判断是否为叶节点呢?
一年多之前 回复
u011683608
蒋金多多 回复houdiniZ: 根据运算符优先级,[] numberVector首先是一个数组。其次,他的数组元素是vector<int>.一个int的向量。<>是模板的运算符。
一年多之前 回复
m0_37990833
houdiniZ 那么vector<int> numberVector[10]是一个什么样的数组呢? 和int array[10]一样,还是一个特殊的二维数组?
一年多之前 回复

#include < iostream >
#include < vector >
using namespace std;
int main()
{
vector< int > numberVector2[10];
vector< int > numberVector = numberVector2[0]; // vector 和 vector[10]之间的关系
numberVector.push_back(1);
numberVector.push_back(10);
numberVector.push_back(100);
numberVector.push_back(1000);

cout << numberVector.size() << endl;
cout << numberVector.empty() << endl;
cout << numberVector.max_size() << endl;
cout << numberVector.capacity() << endl;

for (int i=0;i<numberVector.size();i++)
    cout<<numberVector.at(i)<<endl;

return 0;

}

vector numberVector;//这样的定义,定义了一个vector 对象,这个vector对象numberVector中存的是int型数据。
vector numberVector[20];//这样定义了一个数组,而数组的元素是vector对象,每一个vector对象存的都是int型数据。

所以,对于vector数组,可以使用numberVector[0].pushback(1);操作。

啦啦啦

你思考一下,int a 和int b[10]有啥区别呢,他们是不相同的,一个是容器,一个是容中存放的数据类型,也就是说a可以存放1,但b不可以存放1,但b[0]可以存放1。
现在说说你那个,现在numberVector你把它当成一个int值,这个int值可以push_back ,但如果是numberVector[10],他和前面提到的不是相同的,他是个存放vector类型的容器,他就不能push_back
所以你在使用的时候应该是numberVector[0].push_back,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐