将数组赋值给std::vector会产生不正确的输出
Assigning array to std::vector gives incorrect output
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int p[5] = {1,2,3,4,5};
vector<int> x(p[0], p[4]);
class Polynomial {
};
int main(){
Polynomial Poly;
unsigned int i;
for(i = 0;i<=4; i++)
cout<< x[i]<<endl;
return 0;
}
以上代码输出:
5
-1073741824
0
-1073741824
-2018993448
而我希望它输出
12
3
4
5
为什么输出不正确,我做错了什么?
当i
大于0时,访问x[i]
越界,因为x
是包含值为5 (= p[4]
)的一个(= p[0]
)元素的向量。
这是因为vector<int> v(a, b)
创建了一个包含a
元素的向量,每个元素的值为b
。
要实现您想要的(x
与p
相同),您需要:
#include <iterator>
vector<int> x(std::begin(p), std::end(p))
或者,自己猜尺寸:
vector<int> x(p, p + 5);
或者有点像c:
vector<int> x(p, p + sizeof(p)/sizeof *p);
vector<int> x(p[0], p[4]);
不符合您的期望。它构造一个vector
, p[0]
的元素值为p[4]
。
std::vector::vector的重载将在这里调用。
explicit vector( size_type count,
const T& value,
const Allocator& alloc = Allocator());
如果你尝试cout << x.size();
,你会发现vector
的大小是1
, cout << x[i]
当i > 0
超出边界并导致UB。
你可能想要调用这个重载:
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
然后更改为vector<int> x(&p[0], &p[4]);
。注意,这将使用4
元素构造vector
。vector<int> x(&p[0], &p[5]);
将使用p
的所有5
元素构造vector
。
相关文章:
- 不正确的比较和交换计数器输出用于快速排序功能
- Windows 10命令提示符的输出不正确
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- C++ - 为什么 unicode 输出不正确?
- 连接的组件程序产生不正确的输出
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我的叉子输出不正确
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 当行数和列不匹配时,输出不正确
- 合并排序不正确的输出 c++
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 测试整数是否在范围内时,逻辑错误和不正确输出