C++ C++;vector仅保存最后一个push_back值
我是一个新手,我有一个困扰我很多的问题。请帮帮我 我试图将字符数组值保存在向量中。向量的大小与我推回的数字相同。但是,向量中的所有值都是我向后推的最后一个值 代码如下:C++ C++;vector仅保存最后一个push_back值,c++,memory-management,vector,push-back,C++,Memory Management,Vector,Push Back,我是一个新手,我有一个困扰我很多的问题。请帮帮我 我试图将字符数组值保存在向量中。向量的大小与我推回的数字相同。但是,向量中的所有值都是我向后推的最后一个值 代码如下: vector<char*> qField; int index = 0; for (int i =1;i <=q_size-seedLength;i++) { index++; for (int j=0;j<seedLength-1;j++) { seed[j]
vector<char*> qField;
int index = 0;
for (int i =1;i <=q_size-seedLength;i++)
{
index++;
for (int j=0;j<seedLength-1;j++)
{
seed[j] = seed[j+1];
}
seed[seedLength-1] = *q_ptr;
++q_ptr;
seed[seedLength] = '\0';
qField.push_back(seed);
cout << "Insert Seed"<<index<<"\t\t: " <<qField[i]<<"\n";
}
/*
for (int x=0; x<qField.size();x++)
{
cout << " Result Query"<<x<<": " << qField[x]<<"\n";
}
*/
int x = 0;
for(nuc_vector::iterator iter=qField.begin();iter!=qField.end();++iter)
{
cout << x <<"\n";
x++;
cout << "Query " << *iter<<"\n";
}
为什么呢?有什么不对劲吗
char*
不是字符串、容器或类似的东西。这不是你认为的“价值”。这是一个指针。它是一个指向其他对象的对象:在本例中,显然是一个char
s的缓冲区
向量qField
反复包含同一指针(seed
)的副本。因此,是的,当然,当您取消引用每个副本时,结果将是相同的!即使您同时修改了指针指向的对象
复制指针不会神奇地复制它指向的对象,然后将指针的值更新为现在指向指针对象的新副本
您需要一个语义上包含您试图存储的数据的对象。您希望它具有值语义
您希望存储std::string
s。
std::vector<std::string> qField;
std::向量qField;
尝试将种子包装在std::字符串中。只需更改几行代码:
#include<string>
vector<std::string> qField;
...
...
qField.push_back(std::string(seed));
#包括
向量场;
...
...
qField.push_back(std::string(seed));
种子
是一个不断修改的字符*
。所有向量元素都指向同一内存。您添加seed
但打印qField[i]
,因此您的测试输出证明不了多少。@BenjaminBannier:它证明qField
的每个元素的指针对象都有一个相等的值,从之前的输出来看,这显然不是您的意图。@LightnessRacesinOrbit,嗯,是的。哈,我真的坐在这里等着有人说\o/=)嗯,如果你有蓝色的墙可以帮助别人学习指针,那么我认为这可能是值得的@所有服务的一部分!先生,您需要一块饼干。非常感谢。这解释得很清楚。知道了!!非常感谢你。这一次,结果与预期一样正确。:)
#include<string>
vector<std::string> qField;
...
...
qField.push_back(std::string(seed));