【问题标题】:constructing the vector from an array [closed]从数组构造向量[关闭]
【发布时间】: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 用作doublefloat

输出:

0 1 99
0 0 0

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

【问题讨论】:

  • std::iota 是你手工循环的替代品,完全不需要单独的“数组”,更不用说它上面的动态分配了。
  • 谢谢。事实上,iota 是增加序列的更好解决方案。但我仍然想知道向量初始化有什么问题。
  • 哦,这个代码works for me,没错。我没有看到任何会导致您描述的结果。
  • 我发现了问题。我重载了运算符=。我初始化了另一个矩阵 k_matrix = k_vector。这种初始化似乎是错误的。并且它修改了 k_vector。
  • 该语句没有使用operator=,它使用了转换构造函数。

标签: c++ arrays vector constructor initialization


【解决方案1】:

这是您发布的等效代码,它只是使用 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:: 前缀:)

【讨论】:

  • 如前所述,矢量代码是可以的。错误不在这部分代码中。我重载了 operator = (在代码的其他部分),并且我将输入和输出放在了复制函数的错误位置。由于输入和输出作为参考传入,输入由输出修改(默认情况下为所有 zeor)。所以输入也变成了全零。但无论如何谢谢。
  • @user2684645:我没有注意到你在哪里写的评论说你已经解决了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2019-08-07
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多