vector<string> 批量 赋值 c++

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector<string> 批量 赋值 c++相关的知识,希望对你有一定的参考价值。

std::vector<std::string> Trans;
Trans = "a1w,a", "a2w,a","a3w,a";

我知道这样是不能实现的 但是有没有方法直接赋值 不用push_back? 因为要输入大量字符串,就得用几十个push_back;
可不可以建个结构体,然后批量存入
具体怎么写呢?
谢谢

namespace std 
    template<typename T, typename A>
    class vector;// 声明
    namespace detail 
        template<typename T, typename A>
        struct vector_inserter 
        public:
            typedef vector<T, A> vector_type;
            vector_inserter(vector_type &vec_) : vec(vec_) 

            vector_inserter& operator,(T const &val) 
                vec.push_back(val);
                return *this;
            
        private:
            vector_type &vec;
        ;
    
    template<typename T, typename A, typename Val>
    detail::vector_inserter<T, A> operator+=(vector<T, A> &v, Val const &val) 
        return detail::vector_inserter<T, A>(v), (val);
    



#include <iostream>
#include <vector>
#include <string>
int main() 
    
        std::vector<std::string> vec;
        vec += "1", "2", "3", "5", "6", "7", "8", "9", "10";

        for (size_t i = 0; i != vec.size(); ++i) std::cout << vec[i] << " ";
        std::cout << "\\n";
    
    
        std::vector<int> vec;
        vec += 
            1, 2, 3, 5, 
            6, 7, 8, 9,
            10;

        for (size_t i = 0; i != vec.size(); ++i) std::cout << vec[i] << " ";
        std::cout << "\\n";
    

    return 0;

这里的关键在于重载逗号运算符。

你可以将前面部分代码放到一个头文件里,以后再对vector赋值的时候就都可以使用了。而且因为使用模板类型,对任意的std::vector<T>都可以使用。


其它办法:

1、小猪华smile的办法:先存到数组中,再用循环进行插入。

2、放入文件中,文件读取再插入。


最后,使用最新的C++标准,可以直接写

std::vector<std::string> vec =  "1", "2", "3", "5", "6", "7", "8", "9", "10" ;
std::vector<int> vec =  1, 2, 3, 5, 6, 7, 8, 9, 10 ;

参考技术A 同学要批量赋值给字符串,可以利用C++里面的指针数组就可以了,比如你定义一个指针数组,列如:char *p[],初始化可以是char *p=["china","banabn","xingming"];这样就可以实现大量字符串的赋值了。

C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?

【中文标题】C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?【英文标题】:C++ map<string, vector<pair<string, string> > > : adding a mapping to an empty vector? 【发布时间】:2013-07-05 19:47:47 【问题描述】:

我对 C++ 容器模板非常陌生。我有一系列记录。每条记录都有一个唯一的名称和一个字段/值对列表。这些记录将按名称访问。字段/值对的顺序很重要。因此,我将其设计如下:

typedef string      Typecode;
typedef string      Fieldname;
typedef string      Fieldvalue;
typedef vector<pair<Fieldname, Fieldvalue> >  Field_value_pairs;
typedef map<Typecode, Field_value_pairs>      Record_map;

Record_map          records;

我想定义一个方法 add_record(Typecode),它将向 records 添加一个条目,其键类型为 Typecode 和一个空的 Field_value_pairs 向量。 (稍后我将添加部分或全部字段/值对。)但我似乎无法弄清楚要使用什么 map 和 vector 方法。

我想我想使用 operator=,如records["foo_record"] =。但是我应该分配什么值来创建一个“空对向量”?

【问题讨论】:

分配它Field_value_pairs(); 【参考方案1】:

你应该指定为:

records["foo_record"] = vector<pair<Fieldname, FieldValue> >();

std::vector 的默认构造函数将创建一个空向量,然后您可以使用向其添加新值

records["foo_record"].push_back(pair<Fieldname, FieldValue>("name", "value"));

【讨论】:

【参考方案2】:

默认构造一个Field_value_pairs 对象并将其分配给新的映射条目。

void add_record( Record_map& records, Typecode const& code )

    records[code] = Field_value_pairs();

请注意,这将覆盖该Typecode 的任何现有条目。如果您只想有条件地添加一个Typecode,仅在一个不存在的情况下,使用map::find 来确定该条目是否存在。

void add_record( Record_map& records, Typecode const& code )

    if( records.find( code ) == records.end() ) 
        records[code] = Field_value_pairs();
     else 
        // entry exists, do something else
    

【讨论】:

以上是关于vector<string> 批量 赋值 c++的主要内容,如果未能解决你的问题,请参考以下文章

c++ 把string类型的h1,赋值给vector<string>类型的h2

vectorstring实现大数加法乘法

VHDL中std_logic_vector(4095 dow nto 0)怎么赋0初值

vector<vector<string>> 与vector<vector<string> >区别

将 vector<string> 元素复制到其他其他 vector<string>* (1 作为指针传递)

请各位大侠帮忙指点啊,vector<string>如何转化成string?