首页 > 其他分享 >使用while循环分别对两个vector进行赋值,该怎么做

使用while循环分别对两个vector进行赋值,该怎么做

时间:2024-11-16 15:46:09浏览次数:1  
标签:index int vshort v1 while vector include 赋值

问题

在写程序的时候遇到了这样一个问题,见代码

#include <iostream>
#include <vector>

using namespace std;

bool isequal(vector<int> vshort, vector<int> vlong)
{
	for (int index = 0; index != vshort.size(); index++)
		if (vshort[index] != vlong[index])
			return false;
	return true;
}


int main()
{
	vector<int> v1;
	vector<int> v2;
	int n;
	while (cin >> n)
		v1.push_back(n);
	while (cin >> n)
		v2.push_back(n);
	if (v1.size() <= v2.size())
		cout << isequal(v1, v2) << endl;
	else
		cout << isequal(v2, v1) << endl;
	return 0;
}   

结果没有达到想要的效果(即正确对两个vector赋值)

可以看下这篇博客应该能明白为什么是错误的写什么代码来清空缓冲区

这段代码目前在接受输入时,将所有的用户输入依次存储到v1 和 v2 中,但它会因为 cin 连续输入的问题导致输入难以区分,造成逻辑错误。如果想要正确设置 v1 和 v2 的值,可以通过以下方式修改代码:

改进方法

方法 1:指定每组的长度

让用户先输入每组数据的长度,然后依次读取指定数量的数据。

#include <iostream>
#include <vector>

using namespace std;

bool isequal(vector<int> vshort, vector<int> vlong)
{
    for (int index = 0; index != vshort.size(); index++)
        if (vshort[index] != vlong[index])
            return false;
    return true;
}

int main()
{
    vector<int> v1, v2;
    int n, size1, size2;

    // 输入第一组数据的长度和内容
    cout << "输入第一组数据的长度:";
    cin >> size1;
    cout << "输入第一组数据:";
    for (int i = 0; i < size1; ++i)
    {
        cin >> n;
        v1.push_back(n);
    }

    // 输入第二组数据的长度和内容
    cout << "输入第二组数据的长度:";
    cin >> size2;
    cout << "输入第二组数据:";
    for (int i = 0; i < size2; ++i)
    {
        cin >> n;
        v2.push_back(n);
    }

    if (v1.size() <= v2.size())
        isequal(v1, v2) ? cout << "v1是v2的前缀" << endl
        : cout << "v1 和 v2 之间不存在前缀关系" << endl;
    else
        isequal(v1, v2) ? cout << "v2是v1的前缀" << endl
        : cout << "v1 和 v2 之间不存在前缀关系" << endl;

    return 0;
}

输出如下:

img

方法 2:使用特殊分隔符

用一个非整数值(如 end)或其他特定分隔符来标记输入结束。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

bool isequal(vector<int> vshort, vector<int> vlong)
{
    for (int index = 0; index != vshort.size(); index++)
        if (vshort[index] != vlong[index])
            return false;
    return true;
}

int main()
{
    vector<int> v1, v2;
    int n;
    string input;

    // 输入第一组数据
    cout << "输入第一组数据(以 end 结束):";
    while (cin >> input && input != "end")
    {
        n = stoi(input);
        v1.push_back(n);
    }

    // 输入第二组数据
    cout << "输入第二组数据(以 end 结束):";
    while (cin >> input && input != "end")
    {
        n = stoi(input);
        v2.push_back(n);
    }

    if (v1.size() <= v2.size())
        isequal(v1, v2) ? cout << "v1是v2的前缀" << endl
        : cout << "v1 和 v2 之间不存在前缀关系" << endl;
    else
        isequal(v1, v2) ? cout << "v2是v1的前缀" << endl
        : cout << "v1 和 v2 之间不存在前缀关系" << endl;

    return 0;
}

输出如下:

img

想了解下stio函数的话,可以看下这篇博客stoi函数介绍

方法 3:使用分行输入

通过每组数据分行输入,每行数据代表一个向量。

#include <iostream>
#include <vector>
#include <sstream>

using namespace std;

bool isequal(vector<int> vshort, vector<int> vlong)
{
    for (int index = 0; index != vshort.size(); index++)
        if (vshort[index] != vlong[index])
            return false;
    return true;
}

vector<int> parseLine(const string& line)
{
    vector<int> vec;
    int num;
    stringstream ss(line);
    while (ss >> num)
        vec.push_back(num);
    return vec;
}

int main()
{
    vector<int> v1, v2;
    string line;

    // 输入第一组数据
    cout << "输入第一组数据(单独一行):";
    getline(cin, line);
    v1 = parseLine(line);

    // 输入第二组数据
    cout << "输入第二组数据(单独一行):";
    getline(cin, line);
    v2 = parseLine(line);

    if (v1.size() <= v2.size())
        isequal(v1, v2) ? cout << "v1是v2的前缀" << endl
        : cout << "v1 和 v2 之间不存在前缀关系" << endl;
    else
        isequal(v1, v2) ? cout << "v2是v1的前缀" << endl
        : cout << "v1 和 v2 之间不存在前缀关系" << endl;

    return 0;
}

输出如下:

img

关于streamstring的介绍,可以看下这篇博客 streamstring类介绍

总结

  • 指定长度法(方法 1):适合输入大小固定的情况。

  • 特殊分隔符法(方法 2):适合不定长输入,但要求用户清楚规则。

  • 分行输入法(方法 3):最通用且直观,推荐用于实际开发中。

标签:index,int,vshort,v1,while,vector,include,赋值
From: https://www.cnblogs.com/hisun9/p/18549420

相关文章

  • vector<int>::push_back 与直接访问性能对比
    vector是提前开好空间然后每次clear,vector2是reserve,list就是list,array是对vectorvec[cur++]=i;。这里都是整数,push_back与emplace_back整体没有什么区别,但有人要看,所以函数名前面加了e的是emplace_back。测试结果:array<vector=vector2<<list2024-11-15T......
  • docker-compose安装pgsql和pgvector
    快速安装PostgreSQL和pgvector1、创建Dockerfile文件,代码如下:#使用PostgreSQL16基础镜像FROMpostgres:16#安装pgvectorRUNapt-getupdate&&\apt-getinstall-ypostgresql-16-pgvector&&\rm-rf/var/lib/apt/lists/*#设置启动命令CMD["postgr......
  • C++学习笔记之string容器、vector容器
    我们读过的书,说过的话,见过的山水,见到的人和事,最终都会变成我们脚下的的路。1.string容器string是C++风格的字符串,而string本质上是一个类。#include<iostream>usingnamespacestd;#include<string>//以下参数为constchar*类型与string类型的函数参数可以......
  • Langchain and Azure cognitive search - ImportError - cannot import name ‘Vector
    题意:LangchainandAzurecognitivesearch-ImportError-cannotimportname'Vector'from'azure.search.documents.models'“Langchain和Azure认知搜索-导入错误:无法从'azure.search.documents.models'导入名称'Vector'”问题背景:Iam......
  • ECMAScript 安全赋值运算符 (?=) 提案介绍及其 Polyfill
    本文介绍最新的ECMAScript安全赋值运算符提案以及相应的替代实现前言我们经常会跟try/catch打交道,但如果你写过Go或者Rust就会发现在这两种语言中是没有try/catch的,那么这些语言怎么进行错误捕获呢Go:Errorhandlingf,err:=os.Open("filename.ext")iferr......
  • 【python系列】python之变量赋值操作
    1.前言变量是什么?我们学任何什么东西,都要从定义入手,只有清晰且无歧义的定义,才能真正理解这个概念是什么意思。维基百科的定义:在数学、物理学中,变量(variable)又称变数,是表达式或公式中,没有固定的值而可以变动的数或量;该数或量可以是随意的,也可能是未指定或未定的。——Wik......
  • c++(vector、map、list、deque、set)总结-面试
    目录1.vector2.deque3.list4.map5.set6.queue7.stack8.STL容器使用时机希望在面试和学习过程中可以帮助大家梳理重点C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续......
  • 【c++】vector
    序列式容器vectorstd::vector 是STL提供的 内存连续的、可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。为什么要使用 vector作为OIer,对程序效率的追求远比对工程级别的稳定性要高得多,而 vector 由于其对内存的动态......
  • Distance Metrics in Vector Search
    from: https://weaviate.io/blog/distance-metrics-in-vector-search Vectordatabases -like Weaviate -use machinelearningmodels toanalyzedataand calculatevectorembeddings.Thevectorembeddingsare storedtogetherwiththedata inadataba......
  • Python条件赋值:一种强大的控制流程方式
    在编程中,条件赋值是一种非常常见的操作,它允许我们在满足特定条件时对变量进行赋值。Python作为一种广泛应用的编程语言,自然也支持这种操作。本文将对Python中的条件赋值进行简要解读和分析。什么是条件赋值?条件赋值,顾名思义,就是在满足某个条件时进行的赋值操作。在Python中,我......