我试图使用C ++自我学习矢量。
据我所知,与数组相比,矢量更具动态性和效率。
对于我的练习,我尝试将不同数据类型的值存储到向量中,并从向量中打印这些值。
所以我开始尝试将一些值硬编码到不同的向量数据类型中,例如integer,string和double。
因此经过一些研究后,我试图将一些整数和双值硬编码到向量中,如下所示。
std::vector<int> stockID = {023};
std::vector<double> stockPrice;
stockPrice.push_back("50.50");
std::vector<int> stockChange = {100};
std::vector<int> transactionDate = {151212};
但是它返回了一个名为conversion of int/double to non-scarlar type
的错误。
然而,当我尝试将值硬编码到矢量字符串中时,它似乎没有任何问题。
std::vector<string> stockItem;
stockItem.push_back("Samsung Phone");
std::vector<string> category;
category.push_back("Electronic");
std::vector<string> subCategory;
subCategory.push_back("Mobile Phone");
我可以问一下,字符串向量与int和double向量的工作方式有何不同,以产生这样的错误。
答案 0 :(得分:2)
正如问题评论部分中的whiZTiM所指出的那样。
""
中引用的任何内容都是C ++中的字符串文字。您的stockPrice
仅存储double
,并且没有从字符串文字到double
的隐式转换
如果你想要在向量stockPrice
中。它应该像
stockPrice.push_back(50.50);
而不是
stockPrice.push_back("50.50");
答案 1 :(得分:0)
您可能想要调用constructor of vector
,因此请删除一些=
符号:
std::vector<int> stockID{023};
BTW,023
是19的八进制表示法。
当然,pusk_back
是一个成员函数,因此您只能在某个函数体内调用它(作为语句),并且需要传递适当的类型。显然,"50.50"
是一个字符串文字,而不是浮点文字。所以这应该有效:
void f() {
std::vector<double> stockPrice;
stockPrice.push_back(50.50);
}
假设它出现在顶层(不在另一个函数体内)。
不要忘记启用所有警告&amp;编译时调试信息,例如如果使用GCC,则使用g++ -Wall -g
进行编译。请务必至少学习C++11(不是标准的旧版本)。如果你有一些旧版本的-std=c++11
,也许可以通过g++
。我建议(2017年2月)至少使用一些GCC 6。
我正在尝试使用C ++自我学习矢量。
不要研究向量,而是学习整个C ++(C ++ 11或C ++ 14)编程语言(这是一种困难而复杂的编程语言)。所以请阅读最新版本的例如Programming -- Principles and Practice Using C++并查看了一些C++ reference网站。
在C ++中查看一些现有 free software的源代码(例如在github上)(确保它是最新的和真正的C ++ 11或更高版本)
顺便说一下,这应该可行 std::vector<std::string> category{"Electronic","Furniture"};