为什么 std::矢量调整大小失败
Why std::vector resize fails?
我正在尝试调整在定义的自定义类上定义的向量的大小
class Product{
private:
Product *next;
int pid;
public:
Product(int _pid): pid(_pid){}
};
int main(){
vector<Product> v;
v.resize(1, Product(1));
v[0] = Product(1);
cout<< v.size() << endl;
v.resize(2, Product(2));
}
当我尝试第二次调整它的大小时,我的代码失败了,我已经查看了其他答案,但我无法真正理解它背后的想法。
我有一个要求,我需要调整矢量的大小。
有人可以解释一下吗?
如果您想向vector
添加新Product
,则使用v.push_back(Product(1));
会更容易。这样,您就不必自己调整其大小。
但是你的问题的答案是第二次调整大小没有问题,因为在调用v.resize(1, Product(1));
后,你的v
的大小是1
,并且它只能存储一个对象。(作为提醒,每个array
的第一个索引,vector
等等于0
)。您的程序不起作用,因为通过使用v[1] = Product(1);
您尝试访问vector
的第二个索引,这超出了范围。
如果将main
更改为此,则问题将消失:
int main(){
vector<Product> v;
v.resize(1, Product(1));
v[0] = Product(1);
v.resize(2, Product(2));
}
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 为char数组调整zlib-zpipe
- 视图中的参数推导失败:take_while
- 调整大小后指向元素值的指针unordered_map有效?
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 在C++中调整向量中的索引
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- eigen matrixx断言失败了,尽管调整了大小
- 为什么 std::矢量调整大小失败