【发布时间】:2013-09-04 04:20:01
【问题描述】:
我试图从一个数组初始化一个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 用作double 或float。
输出:
0 1 99
0 0 0
编辑:我已经发现了问题。它与我在此问题中发布的代码无关。
【问题讨论】:
-
std::iota是你手工循环的替代品,完全不需要单独的“数组”,更不用说它上面的动态分配了。 -
谢谢。事实上,iota 是增加序列的更好解决方案。但我仍然想知道向量初始化有什么问题。
-
哦,这个代码works for me,没错。我没有看到任何会导致您描述的结果。
-
我发现了问题。我重载了运算符=。我初始化了另一个矩阵 k_matrix = k_vector。这种初始化似乎是错误的。并且它修改了 k_vector。
-
该语句没有使用
operator=,它使用了转换构造函数。
标签: c++ arrays vector constructor initialization