我正在使用带有C ++ ADT的eclipse luna 我已经设置编译器将c ++ 11和微处理器以及项目设置的路径编译为c ++ 11
我正在尝试创建一个简单的向量,我收到的错误显示:
a2' is ambiguous '
Candidates are:
vector(unsigned int, const std::allocator<double> &)
vector(unsigned int, const double &, const std::allocator<double> &)
'
我写的代码是:
#include<iostream>
#include<vector>
#include<array>
int main(){
using namespace std;
double a1[4] = {1.2,2.4,3.6,4.8};
vector<double> a2(3);
array<double,5> a3;
}
数组工作正常,但矢量出现错误。 任何帮助将不胜感激。
答案 0 :(得分:1)
忽略double a1 = {1.2,2.4,3.6,4.8};
,
在vector<double> a2(3);
中,编译器试图找出你想要调用的构造函数,以及你的实现有两个候选者:
vector(unsigned int, const std::allocator<double> &) vector(unsigned int, const double &, const std::allocator<double> &)
你只想预留空间吗?
vector<double> a2{};
a2.reserve(3);
或者用3个元素初始化?
vector<double> a2{ 1.0, 2.0, 3.0 };
答案 1 :(得分:1)
从我的问题中我可以收集到的内容,您希望创建一个包含3个double
元素的向量,这些元素已默认初始化?
使用标准库时,最好习惯cppreference之类的文档。如果我们查看std::vector::vector
on cppreference的文档,我们可以看到我们想要的构造函数具有以下签名:
explicit vector( size_type count );
因此,我们可以执行以下操作来实现您的目标(Ideone here):
#include <vector>
int main()
{
std::vector<double> ourVec( 3U ); // Will result in 3 default-intialized doubles
}
更常见的是,我们希望初始化具有某些值的元素(0.0
可能是一个不错的选择),查看cppreference,我们可以看到以下原型:
explicit vector( size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());
我们可以使用以下代码(Ideone is here)显示此作品:
#include <vector>
int main()
{
std::vector<double> ourVec( 3U, 0.0 ); // Will result in {0.0, 0.0, 0.0}
}
如果您希望在初始化向量时显式指定元素,可以使用std::initializer_list
构造函数来使用它:
vector( std::initializer_list<T> init,
const Allocator& alloc = Allocator() );
我们可以使用如下(Ideone):
#include <vector>
int main()
{
std::vector<double> ourVec = {1.2, -1.9, 0.1, 0.0}
}