如何将元素添加到向量的字符串位置
how to add an element to the string position of a vector
我想要Carnet中的add函数class给一个位置加一个数字(position是一个字符串)当我显示myclass << ["string"]到显示数字
问题是,当我 运行 主指令时,它显示错误 (7,7,7),而不是显示 7,9,10
我认为问题出在 vector 中,但我不知道如何解决,我试过这个:
this->insert(this->begin() + atoi(a.c_str()), b);
#include <iostream>
#include <vector>
using namespace std;
template <typename ElementT>
class Carnet : public vector<ElementT> {
public:
Carnet() : vector<ElementT>() {
}
int operator[] (string materie) {
return this->at(atoi(materie.c_str()));
}
Carnet add(string a, int b) {
this->insert(this->begin() + atoi(a.c_str()), b);
return *this;
}
Carnet removeLast() {
this->pop_back();
return *this;
}
};
int main()
{
Carnet<int> cat;
cat.add("SDA", 9);
cat.add("OOP",7).add("FP", 10);
cout<<cat["OOP"];
cout<<cat["SDA"];
cout<<cat["FP"];
cat.removeLast().removeLast();
return 0;
}
问题出在这里:
Carnet add(string a, int b) {
this->insert(this->begin() + atoi(a.c_str()), b);
return *this;
当你return按值进行时,你正在制作一个副本,这意味着这里
cat.add("OOP",7).add("FP", 10);
第二个 add 将对新对象而不是 cat 进行操作。
您应该改用引用:
Carnet& add(string a, int b) {
与 removeLast
相同的问题。
编辑:此外,从 vector
派生通常是不可取的。您应该考虑改用组合。
编辑2:还有一个更根本的问题。 atoi
在这里应该只 return 0,因为你永远不会用任何数字字符串来表示它。
不完全清楚你打算在这里做什么。但也许 vector 是错误的容器?似乎您想将数字与字符串相关联。 std::map<std::string, int>
可以胜任。
我想要Carnet中的add函数class给一个位置加一个数字(position是一个字符串)当我显示myclass << ["string"]到显示数字
问题是,当我 运行 主指令时,它显示错误 (7,7,7),而不是显示 7,9,10
我认为问题出在 vector 中,但我不知道如何解决,我试过这个:
this->insert(this->begin() + atoi(a.c_str()), b);
#include <iostream>
#include <vector>
using namespace std;
template <typename ElementT>
class Carnet : public vector<ElementT> {
public:
Carnet() : vector<ElementT>() {
}
int operator[] (string materie) {
return this->at(atoi(materie.c_str()));
}
Carnet add(string a, int b) {
this->insert(this->begin() + atoi(a.c_str()), b);
return *this;
}
Carnet removeLast() {
this->pop_back();
return *this;
}
};
int main()
{
Carnet<int> cat;
cat.add("SDA", 9);
cat.add("OOP",7).add("FP", 10);
cout<<cat["OOP"];
cout<<cat["SDA"];
cout<<cat["FP"];
cat.removeLast().removeLast();
return 0;
}
问题出在这里:
Carnet add(string a, int b) {
this->insert(this->begin() + atoi(a.c_str()), b);
return *this;
当你return按值进行时,你正在制作一个副本,这意味着这里
cat.add("OOP",7).add("FP", 10);
第二个 add 将对新对象而不是 cat 进行操作。
您应该改用引用:
Carnet& add(string a, int b) {
与 removeLast
相同的问题。
编辑:此外,从 vector
派生通常是不可取的。您应该考虑改用组合。
编辑2:还有一个更根本的问题。 atoi
在这里应该只 return 0,因为你永远不会用任何数字字符串来表示它。
不完全清楚你打算在这里做什么。但也许 vector 是错误的容器?似乎您想将数字与字符串相关联。 std::map<std::string, int>
可以胜任。