代码失败在向量数据前插入数字
Posted
技术标签:
【中文标题】代码失败在向量数据前插入数字【英文标题】:Code failure insert digits before data of the vector 【发布时间】:2013-10-11 04:43:34 【问题描述】:我应该使用函数来编写代码,该函数在询问用户输入后,将数字放在向量之前,如下所示: 如果向量是 11,12,13,14 新向量是 1 11 2 12 3 13 4 14 直到向量完成,然后我必须打印它,但我收到向量下标超出范围的错误,感谢任何帮助。 这是我的代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<double> llena_vector(int x,vector<double> ingreso)
cout<<"Ingrese numeros: ";
while(cin>>x);
ingreso.push_back(x);
return ingreso;
vector<double> arma_vector(int contador,vector<double> intercalado)
int i=0;
for(contador=1;contador< intercalado.size()+1;contador++);
intercalado.insert(intercalado.begin()+i,contador);i++;
return intercalado;
vector<double> imprime_vector(int cuenta,vector<double> imprimir)
for(cuenta=0;cuenta<imprimir.size();cuenta++);
cout<<imprimir[cuenta]<<" ";
return imprimir;
int main()
int y=0;
int q=0;
int w=0;
int f=0;
vector<double> usuario;
vector<double> guardar;
vector<double> resultado;
vector<double> print;
guardar= llena_vector(y,usuario);
resultado=arma_vector(q,guardar);
print=imprime_vector(w,resultado);
system("pause");
【问题讨论】:
【参考方案1】:这是代码的干净版本,处于工作状态。
#include <iostream>
#include <vector>
using namespace std;
void fill_vector(vector<double>& v)
cout << "Enter 5 numbers." << endl;
for (int i = 0; i < 5; ++i)
double d;
cin >> d;
v.push_back(d);
void insert_count(vector<double>& v)
size_t size = v.size();
for (size_t i = 0, j = 0; i < size; ++i, j += 2)
vector<double>::iterator pos = v.begin() + j;
v.insert(pos, i + 1);
void print_vector(vector<double>& v)
for (size_t i = 0; i < v.size(); ++i)
cout << v[i] << " ";
cout << endl;
int main()
vector<double> v;
fill_vector(v);
insert_count(v);
print_vector(v);
像其他人(可能已经)指出的那样:
您不需要按值传递(您基本上是在传递一堆副本),您可以通过引用传递来减少开销并加快速度 您不应将分号(;
) 直接放在循环语句后面
在循环大小时,size_t
通常比 int
好
你在 <string>
不被使用时添加了它
您传递了不需要的参数(例如计数器)
您为用户输入使用了 while 循环,但它只适用于管道输入数据,否则它将永远循环;具有已知计数的 for 循环更适合用户输入
在现有元素之间插入数字的函数出错,您计算的插入位置不正确
您的代码格式一团糟,导致代码难以阅读
您不应该污染命名空间(即using namespace std
),但我保留它,因为它在示例代码中很常见
如果您使用的是 C++11,我建议使用 for-each 循环来打印向量,并在声明迭代器时使用 auto 关键字
【讨论】:
【参考方案2】:我猜有一个错字:你应该删除for(cuenta=0;cuenta<imprimir.size();cuenta++);
中的最后一个;
编辑:正如 jrd1 所指出的,您在所有 for 和 while 循环中都有这个错字...
【讨论】:
有错别字,但在^Z中仍然存在。感谢您的帮助 @David,你在修正错别字后还有问题吗?首先,请用
和
正确定义while 和循环的范围。其次,即使您的问题得到解决,我还是建议使用本地范围 size_t
而不是 int
重写 for 循环。第三,我建议在 arma_vector
的情况下传递您的向量作为参考,在 imprime_vector
的情况下传递 const 参考【参考方案3】:
首先,您的代码存在许多问题。但是,我已经对其进行了修改以使其与您的原始版本相似。
#include <iostream>
#include <string>
#include <deque>
#include <cstdlib>
using namespace std;
deque<double> llena_deque(int x, deque<double> ingreso)
cout<<"Ingrese numeros: ";
while(cin>>x)
ingreso.push_back(x);
return ingreso;
deque<double> arma_deque(int contador, deque<double> intercalado)
int size = intercalado.size()+1;
for(int i=1; i < size; ++i)
cout << i << endl;
intercalado.push_front(i);
return intercalado;
deque<double> imprime_deque(int cuenta, deque<double> imprimir)
for(cuenta=0;cuenta<imprimir.size();cuenta++)
cout << imprimir[cuenta] << " ";
return imprimir;
int main()
int y=0;
int q=0;
int w=0;
int f=0;
deque<double> usuario;
deque<double> guardar;
deque<double> resultado;
deque<double> print;
guardar= llena_deque(y,usuario);
resultado=arma_deque(q,guardar);
print=imprime_deque(w,resultado);
return 0;
所有循环的末尾都有;
。这就是您收到错误的原因之一,因为分号终止了一条语句 - 因此,您的循环从未真正访问过向量,这就是您遇到内存访问冲突的原因。
您正在按值传递所有内存(这可能会很慢)。考虑使用引用。
您的操作表明您需要不断地将新数据推送到您的向量前面。如果是这样,请使用deque
(就像我一样),因为它具有为此目的明确设计的功能(在两端插入操作)。
虽然,我会说您的代码逻辑有时很令人费解:即在arma_vector
中,如果您甚至不使用它,为什么要传递contador
的值?你可以改用i
...
【讨论】:
以上是关于代码失败在向量数据前插入数字的主要内容,如果未能解决你的问题,请参考以下文章