std::vector对象操作
C++Primer4
Exercise 3.13:
读一组整数到 vector 对象:
(1)计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。
(2)头尾元素两两配对(第一个和最后一个, 第二个和倒数第二个, 以此类推),计算每对元素的和,并输出。
Implement
(1)计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。
下面是我的实现,代码有问题,可以找找看:
#include <iostream>
#include <iomanip>
#include <time.h>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::setw;
using std::endl;
using std::string;
using std::vector;
int main()
{
int ival;
vector<int> ivec;
while (cin>>ival)//Ctrl+z结束
{
ivec.push_back(input);
}
for (vector<int>::size_type index=0; index!=ivec.size()-1; index+=2)
{
cout<<"ivec["<<index<<"]+ivec["<<index+1<<"]="<<ivec[index]+ivec[index+1]<<endl;
}
if (ivec.size()%2)
{
cout<<"ivec["<<ivec.size()-1<<"]="<<ivec[ivec.size()-1]<<"未进行加和"<<endl;
}
return 0;
}
是否已经找到了错误呢?不行就编译运行下就能找到错在哪了
另,《习题解答》的程序中,还增加了判断ivec对象是否为空
(2)头尾元素两两配对(第一个和最后一个, 第二个和倒数第二个, 以此类推),计算每对元素的和,并输出。
这是我的实现:
for (vector<int>::size_type index=0; index!=ivec.size()/2; index++)
{
cout<<"ivec["<<index<<"]+ivec["<<ivec.size()-index-1<<"]="
<<ivec[index]+ivec[ivec.size()-index-1]<<endl;
}
if (ivec.size()%2)
{
cout<<"ivec["<<(ivec.size()-1)/2<<"]="<<ivec[(ivec.size()-1)/2]<<"未进行加和"<<endl;
}
每次循环都会调用两次ivec.size(),还有for条件判断的一次,所以效率比较低。下面是《习题解答》的实现,整个for循环只调用一次ivec.size(),只是增加了一个vector<int>::size_type变量,代码如下:
for (vector<int>::size_type first=0, last=ivec.size()-1; first<last; ++first, --last)
{
cout<<"ivec["<<first<<"]+ivec["<<last<<"]="<<ivec[first]+ivec[last]<<endl;
}
if (ivec.size()%2)
{
cout<<"ivec["<<(ivec.size()-1)/2<<"]="<<ivec[(ivec.size()-1)/2]<<"未进行加和"<<endl;
}
效率明显提升是比我的实现高多啦,要写出高效的循环,并实现需求所要求的逻辑,真的是不容易啊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理