从数组构造向量

constructing the vector from an array

本文关键字:向量 数组      更新时间:2023-10-16

我尝试从数组初始化std::vector,但向量包含零,尽管数组已正确初始化。

法典:

lbfgsfloatval_t * k_array = new lbfgsfloatval_t[100];
for(int i = 0; i < 100; i++)
    k_array[i] = (lbfgsfloatval_t)i;
vector<lbfgsfloatval_t> k_vector(k_array, k_array+100);
cout << k_array[0] << " " << k_array[1] << " " << k_array[99] << endl;
cout << k_vector[0] << " "<< k_vector[1] << " "<< k_vector[99] << endl;

其中lbfgsfloatval_t作为doublefloat工作。

输出:

0 1 99
0 0 0

编辑:我已经发现了问题。它与我在这个问题中发布的代码无关。

这是与您发布的代码等效的代码,它只是使用 int 代替:

#include <iostream>
#include <vector>
int main()
{
    int * arr = new int[100];
    for(int i = 0; i < 100; i++)
        arr[i] = (int)i;
    std::vector<int> vec(arr, arr+100);
    std::cout << arr[0] << " " << arr[1] << " " << arr[99] << std::endl;
    std::cout << vec[0] << " " << vec[1] << " " << vec[99] << std::endl;
}

其中输出:

0 1 99
0 1 99

因此,您遇到的问题不是由从数组构造向量引起的。您应该使用一些体面的调试器逐步浏览代码,以了解运行时发生的情况。

另请注意,全局范围内的using namespace std;是一种不好的做法,通常最好坚持使用std::前缀而不是:)