与在C 中返回向量的行为不一致
Inconsistent behavior with returning a vector in c++
我正在从事C (11)中的一个项目,并且在从函数中返回向量方面存在一些问题。我问题的最小工作示例如下:
#include <iostream>
#include <vector>
using namespace std;
vector<int*> find_items()
{
vector<int*> items;
int a[2] = {1,2};
items.push_back(a);
cout << items.at(0)[0] << endl;
return items;
}
int main()
{
vector<int*> items = find_items();
cout << items.at(0)[0] << endl;
return 0;
}
我希望能够与项目尺寸2的阵列一起工作,因此我正在使用这些阵列的第一个元素的指针向量。这似乎可以正常工作,除非我需要从函数返回这样的向量。
在此代码中,从我的天真的角度来看,我应该在两个Cout上获得相同的输出,而是第二个打印似乎是垃圾号码。
我读到,当函数返回一个函数时,C 返回向量的副本。但是在这种情况下,在向量的副本中会创建新的指针吗?我的猜测是,这些新指针实际上指出了错误的位置。此副本不够深,还是这些副本?在这种情况下,返回向量的正确方法是什么?
非常感谢您的任何帮助!
您正在创建find_items
内部的数组。在此功能的末尾,阵列被破坏了。指针无效。行为不确定。使用vector<vector<int>>
或vector<array<int>>
代替vector<int*>
。
#include <iostream>
#include <vector>
#include <array>
using namespace std;
vector<array<int, 2>> find_items()
{
vector<array<int, 2>> items;
array<int, 2> a = {1,2};
items.push_back(a);
cout << items.at(0)[0] << endl;
return items;
}
int main()
{
vector<array<int, 2>> items = find_items();
cout << items.at(0)[0] << endl;
return 0;
}
相关文章:
- 大于65535的C++数组[size]引发不一致的溢出
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- CreateDIBSection为同一图像返回不一致的位图位值
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 为什么C++ STL 哈希表 (unordered_map) 不接受向量作为键
- 这种比较是否不一致(或者存在其他问题)?
- 以下可变参数模板行为是否不一致?
- 如何修复我的链表读数不一致的问题?
- 使用迭代器对向量的C 递归初始化产生不一致的结果
- 与在C 中返回向量的行为不一致
- 使用向量和 pthreads 的计数不一致