我不接受他的建议

  来源:http://www.cnblogs.com/caishen/p/3565929.html

  每天工作都会遇到很多挑战,耗费无数的脑细胞,下班回到家,我都会看一些幽默的节目,比如郭德纲相声、今晚80后脱口秀等等都是不错的选择,放松的状态下更加能激发人的灵感,真心不错!最近我就看到这样一则笑话:某人去小卖部买汽水,拿起一瓶就问多少钱,老板说4元,那人瞅了瞅瓶上写着:“建议零售价2.5元”,就问老板了:“建议价2.5元,你怎么卖4元呢?”老板不屑的回了句:“我不接受它的建议!”

  哎,建议零售价真心不是这样用的!今天和大家说一说“建议零售价”的故事。

  各位买过菜么?知道第一次买菜是什么感觉么?你只身一人进入菜市场,看看这看看那,也不知道是个头大的胡萝卜好还是个头小的好,也不知道是水淋淋的韭菜好,还是带着泥土的好,也不知道。。。。。。总之你不知道的多了,你唯一的常识就是:看看蔬菜的皮肤是否紧绷!要是脱水干瘪了,那肯定不算新鲜。除此之外你一无所知,这还不是最可怕的,最可怕的是不知道价钱,小青菜3元一斤,贵了还是便宜了?你拿不准,倘若笨到问老板:“这贵么?”老板一看就知道你是个嫩娃子,会相当“诚恳”的告诉你:“这不贵,业界良心价”!于是你就买吧,也不知道吃亏了还是怎么滴,反正疑疑惑惑,缩手缩脚,最终也没买的顺畅。

  让我们简单的分析一下,其实不熟悉买菜是你的缺点,虽然部分卖家宰了你一刀,但是整体上你的消费额度肯定上不去,从大的方面说,要是全像你这样的,菜市场的菜肯定卖不动。这就变成了你的缺点要让卖家承担损失,这样的情况,卖家能答应么?

  于是,超市就不会那么笨!联合厂商印制建议零售价就是个典型的例子!要是你仔细的观察,就会发现建议零售价总是比真实的售价高那么一点点,比如建议零售价是3元,它就卖2.5元等等,这样做有什么好处呢?其实这会直接导致你愿意购买这个商品,只是你没有发觉!想想吧,你认为厂商作为第三方,他的报价是合理的,而超市还在合理价的基础上降价了一些,显然购买是不吃亏的!就这么简单,比较大小谁都会,这招出奇的管用。

  知道了一个道理,就没有任何事情可以限制人类的想象力!商家们还在继续,既然建议零售价可以给人们最直观的合理价感受,差价又诱使人们愿意购买,那么为什么不把差价效应放大呢?哎呀,这个想法巧妙至极,我们都见过:“原价1000现价300”,熟悉吧,这就是在放大差价的效应,如此的简单和粗暴。要是直接直接写降到多少还不够刺激,那就写“3折”。哇!好有诱惑力的折扣,折扣这个东西进一步的放大了差价效应,就像是拿刀砍了一截似的,非常的形象和过瘾!所以,商家都是要会除法的,“要卖1000,又要打三折,请问原价是多少?”这应该成为所有商学院学习的应用题,非常重要!

  知道了一个道理,就没有任何事情可以限制人类的想象力!商家们还在继续,如果有人看穿了这个把戏,知道自己面临的是什么,那么就再来一招!是这么玩的:货架上放一排东西,A和B非常相似,A售价100元,B售价30元!于是人们都是会思考的动物,那A和B相比的话,B更加具有性价比!啊,原来性价比就是这么蒙蔽了我们的双眼,我们不再考虑某东西是否值那么多钱,我们也考虑不了,谁又能知道每个类别的商品行情呢?于是谁的性价比高,我就买谁!当然了,商家比我们更深谙此道!卖操作系统的喜欢对比前后版本的安全性和华丽界面,卖汽车的喜欢给汽车定几个低配和高配。。。。。。你看看,甚至不用第三方,自己和自己都能讨论性价比了!有一天我们终于发现:“原来那件用来对比的蹩脚货,像极了建议零售价,就是用来给我们比较的!”

  知道了一个道理,就没有任何事情可以限制人类的想象力!商家们还在继续,既然打折这么给力,那么全场打折呢?是不是更爽?这个看似自然的思考,并不是那么自然的,它从一个商品在打折提升到一个商店在打折,他们写到:“老板跟人跑了,老板娘怒抛所有货物!”,人们并不知道什么商品在打折,以及打几折的信息,但是这个店因为抛货的标语,变的极具吸引力,怎么卖东西不重要,重要的是人们仿佛看到这个店被砍了一截似的,非常过瘾,义无反顾的冲进店里去,商家们就非常自然的解决了顾客上门的问题。这种法子像疯了一样的冲进互联网和IT界,东西还没卖就饥饿营销了,就炒足了概念,你已经进店了,你知道么?

  好多的玩法被人们玩来玩去,我们就生活在这个被爱因斯坦定义的“相对的世界”,任何事情都是相对的,搞个软件什么的,也不能例外,虽然不算是和超市一模一样,但是上游技术提供厂家不断搞出新的技术、解决方案、性能等等等等,无一例外的在玩更新换代和性价比!我相信你明白我在说什么,别被日新月异的新玩意儿蒙蔽了双眼,你就像个买东西的,超市玲琅满目,我知道这很难,但要坚持做你自己,干一些真正帮助企业进步的活儿。

  来吧,有人的地方就有江湖。

转载于:https://www.cnblogs.com/yuzhongwusan/p/3567212.html

<think>好的,我现在需要帮助用户解决关于C++中`std::remove`函数返回值的问题。用户的问题是:“使用remove用什么变量接受他的返回值”。首先,我需要确认用户对`std::remove`的理解程度,可能他们遇到了使用该函数后容器元素未正确删除的情况。 首先,回忆一下`std::remove`的工作原理。`std::remove`并会真正删除容器中的元素,而是将需要删除的元素移动到容器的前部,并返回指向新的逻辑结尾的迭代器。因此,要实际删除元素,通常需要结合容器的`erase`方法,即“erase-remove”惯用法。 用户的问题集中在如何正确接收`std::remove`的返回值。正确的做法是使用一个迭代器来接收返回值,然后将这个迭代器和容器原来的`end()`迭代器一起传递给`erase`方法,以删除剩余的元素。例如,对于`vector<int> vec`,代码应该是: ```cpp auto new_end = std::remove(vec.begin(), vec.end(), value); vec.erase(new_end, vec.end()); ``` 这里,`new_end`的类型通常是`std::vector<int>::iterator`,但使用`auto`可以简化代码。 接下来,需要考虑用户可能的误区。用户可能直接调用`std::remove`而没有处理返回值,导致容器大小未变,只是元素被移动了位置。这时候用户可能会困惑为什么元素还存在,或者出现重复元素。因此,强调`erase`步骤的重要性是关键。 另外,用户可能对迭代器的类型有疑问,是否需要显式声明类型。这时候可以建议使用`auto`来自动推断类型,避免类型声明的复杂性,特别是当容器类型可能变化时,`auto`能提高代码的通用性。 还需要考虑同容器的使用情况。例如,`std::list`有自己的`remove`成员函数,直接修改容器,需要`erase`,但用户的问题可能集中在通用算法`std::remove`上,所以需要区分清楚。 此外,用户可能想知道如何处理多个元素或者使用谓词的情况,比如`std::remove_if`。这时候可以提到类似的用法,只需要将条件替换为谓词函数或lambda表达式即可。 最后,总结最佳实践,即使用`erase-remove`惯用法,并强调正确接收返回值的重要性,避免常见的错误用法。同时,提醒用户注意迭代器失效的问题,确保在修改容器后再使用旧的迭代器。</think>在 C++ 中使用 `std::remove` 或 `std::remove_if` 时,它们的返回值是一个 **迭代器(iterator)**,需要用迭代器类型的变量来接收。具体用法和注意事项如下: --- ### 关键步骤解析 #### 1. **返回值本质** - `std::remove` 返回一个指向容器 **新逻辑结尾** 的迭代器(即“保留元素”的末尾的下一个位置) - **实际容器大小未变**,只是元素被重新排列 #### 2. **正确接收方式** ```cpp // 示例:删除 vector 中所有等于 2 的元素 std::vector<int> vec{1,2,3,2,5}; // 用迭代器接收返回值 auto new_end = std::remove(vec.begin(), vec.end(), 2); // new_end 是 vector<int>::iterator 类型 // 再调用 erase 真正删除多余元素 vec.erase(new_end, vec.end()); // 此时 vec = {1,3,5} ``` #### 3. **变量类型选择** - **推荐用 `auto`**:自动推导迭代器类型 ```cpp auto new_end = std::remove(...); ``` - 显式声明类型(推荐,除非必要): ```cpp std::vector<int>::iterator new_end = std::remove(...); ``` --- ### 📌 注意事项 1. **必须配合 `erase` 使用** `std::remove` 仅移动元素,**修改容器大小**。若调用 `erase`,容器末尾会残留“无效数据”: ```cpp std::remove(vec.begin(), vec.end(), 2); // ❌ 错误!未删除元素 // vec 内容变为 {1,3,5,2,5},但 size() 仍为 5 ``` 2. **链式调用优化** 可直接在 `erase` 中嵌套 `remove`,无需单独变量: ```cpp vec.erase( std::remove(vec.begin(), vec.end(), 2), // 直接作为 erase 的第一个参数 vec.end() ); ``` 3. **对 `std::list` 的特殊处理** 若容器是 `std::list`,优先使用其成员函数 `list.remove()`(效率更高,且直接修改容器): ```cpp std::list<int> lst{1,2,3,2,5}; lst.remove(2); // ✅ 直接删除,无需 erase ``` --- ### 完整代码示例 ```cpp #include <algorithm> #include <vector> int main() { std::vector<int> vec{1,2,3,2,5}; // 正确用法 auto new_end = std::remove(vec.begin(), vec.end(), 2); vec.erase(new_end, vec.end()); // vec = {1,3,5} // 链式写法 vec.erase(std::remove(vec.begin(), vec.end(), 3), vec.end()); // vec = {1,5} return 0; } ``` --- ### 总结表 | 操作 | 接收变量类型 | 后续必要操作 | 典型错误 | |--------------------|--------------------|------------------|-----------------------| | `std::remove` | 迭代器(推荐 `auto`) | `erase` | 忘记调用 `erase` | | `std::remove_if` | 同上 | 同上 | 谓词逻辑错误 | | `list::remove` | 无(直接调用) | 无需 | 误用 `std::remove` | 💡 **核心原则**:始终记住 `std::remove` 的返回值是 **新逻辑结尾的迭代器**,必须通过 `erase` 才能真正删除元素!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值